<?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>151158</bug_id>
          
          <creation_ts>2015-11-11 15:02:35 -0800</creation_ts>
          <short_desc>Stop passing a PassRefPtr to dispatchEvent()</short_desc>
          <delta_ts>2015-11-11 23:29:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1141240</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 15:02:35 -0800</bug_when>
    <thetext>Stop passing a PassRefPtr to dispatchEvent() because:
1. PassRefPtr is legacy and should no longer be used
2. We don&apos;t actually transfer ownership of the Event to the callee

Pass a C++ reference instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141252</commentid>
    <comment_count>1</comment_count>
      <attachid>265323</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 15:34:14 -0800</bug_when>
    <thetext>Created attachment 265323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141256</commentid>
    <comment_count>2</comment_count>
      <attachid>265325</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 15:59:17 -0800</bug_when>
    <thetext>Created attachment 265325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141258</commentid>
    <comment_count>3</comment_count>
      <attachid>265326</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 16:06:08 -0800</bug_when>
    <thetext>Created attachment 265326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141261</commentid>
    <comment_count>4</comment_count>
      <attachid>265328</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 16:16:30 -0800</bug_when>
    <thetext>Created attachment 265328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141354</commentid>
    <comment_count>5</comment_count>
      <attachid>265354</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 19:54:32 -0800</bug_when>
    <thetext>Created attachment 265354
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141365</commentid>
    <comment_count>6</comment_count>
      <attachid>265354</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-11 21:10:11 -0800</bug_when>
    <thetext>Comment on attachment 265354
Patch

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

r=me with comments.  This is a huge code improvement and reduces ref thrashing.  I just have a few questions.  Good luck landing this.

&gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:306
&gt; -        dispatchEvent(event.release());
&gt; +        dispatchEvent(*event);

I don&apos;t like adding unchecked dereferencing of pointers.  Could we make events a Vector&lt;Ref&lt;Event&gt;&gt;?

&gt; Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp:165
&gt; +        dispatchEvent(*event);

ditto

&gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:324
&gt; +        dispatchEvent(*event);

ditto

&gt; Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp:745
&gt; +        dispatchEvent(*event);

ditto

&gt; Source/WebCore/css/FontLoader.cpp:191
&gt; +        dispatchEvent(*pendingEvents[index]);

ditto

&gt; Source/WebCore/dom/EventTarget.h:127
&gt; +    bool dispatchEvent(Event*, ExceptionCode&amp;); // DOM API

Why is this comment here?

&gt; Source/WebCore/dom/MessagePort.cpp:-165
&gt; -        dispatchEvent(evt.release(), ASSERT_NO_EXCEPTION);

Should we completely remove IgnorableExceptionCode?

&gt; Source/WebCore/editing/Editor.cpp:-855
&gt; -    target-&gt;dispatchEvent(event, IGNORE_EXCEPTION);

Same with IGNORE_EXCEPTION.  Why are we getting rid of this?

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:153
&gt; -        dispatchEvent(WTF::move(deferredProgressEvent));
&gt; +        dispatchEvent(*deferredProgressEvent);

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141374</commentid>
    <comment_count>7</comment_count>
      <attachid>265361</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 21:37:08 -0800</bug_when>
    <thetext>Created attachment 265361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141376</commentid>
    <comment_count>8</comment_count>
      <attachid>265354</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 21:47:11 -0800</bug_when>
    <thetext>Comment on attachment 265354
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/MediaStream.cpp:306
&gt;&gt; +        dispatchEvent(*event);
&gt; 
&gt; I don&apos;t like adding unchecked dereferencing of pointers.  Could we make events a Vector&lt;Ref&lt;Event&gt;&gt;?

Sure. Will do.

&gt;&gt; Source/WebCore/dom/EventTarget.h:127
&gt;&gt; +    bool dispatchEvent(Event*, ExceptionCode&amp;); // DOM API
&gt; 
&gt; Why is this comment here?

Because this is supposed to be called from JS.

&gt;&gt; Source/WebCore/dom/MessagePort.cpp:-165
&gt;&gt; -        dispatchEvent(evt.release(), ASSERT_NO_EXCEPTION);
&gt; 
&gt; Should we completely remove IgnorableExceptionCode?

I am pretty sure there is still a lot of code that uses it.

&gt;&gt; Source/WebCore/editing/Editor.cpp:-855
&gt;&gt; -    target-&gt;dispatchEvent(event, IGNORE_EXCEPTION);
&gt; 
&gt; Same with IGNORE_EXCEPTION.  Why are we getting rid of this?

There are 2 dispatchEvent() overloads:
1. dispatchEvent(Event*, ExceptionCode&amp;)
-&gt; Meant to be used by JS bindings. Because the event comes from JS, we do some additional checks on the event and throw an exception if those checks fail. The checks are: null pointer, event is not initialized, event is already being dispatched.
2. dispatchEvent(Event&amp;)
-&gt; Meant to be called by C++ code. It cannot throw as we expect the event argument to be valid.

Previously, some of our C++ code was unnecessarily calling the overload that is meant to be used by JS so I fixed that. I will also add assertions in dispatchEvent(Event&amp;) to make sure the event is initialized and not already being dispatched.

&gt;&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:153
&gt;&gt; +        dispatchEvent(*deferredProgressEvent);
&gt; 
&gt; Ditto

Well, this one has a null check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141379</commentid>
    <comment_count>9</comment_count>
      <attachid>265362</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 21:49:11 -0800</bug_when>
    <thetext>Created attachment 265362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141381</commentid>
    <comment_count>10</comment_count>
      <attachid>265363</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 21:51:03 -0800</bug_when>
    <thetext>Created attachment 265363
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141383</commentid>
    <comment_count>11</comment_count>
      <attachid>265364</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 21:55:24 -0800</bug_when>
    <thetext>Created attachment 265364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141398</commentid>
    <comment_count>12</comment_count>
      <attachid>265364</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 23:28:56 -0800</bug_when>
    <thetext>Comment on attachment 265364
Patch

Clearing flags on attachment: 265364

Committed r192354: &lt;http://trac.webkit.org/changeset/192354&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141399</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-11 23:29:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265323</attachid>
            <date>2015-11-11 15:34:14 -0800</date>
            <delta_ts>2015-11-11 15:59:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151158-20151111153408.patch</filename>
            <type>text/plain</type>
            <size>116129</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMzE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGMxMzY5ODYxNTdlMGY3
OGU1ZTFkOTNjYzg2MmMxMzg2OTgwNjZkMi4uMzc0ZmU4YjUxNzVmZGM4ODU5OTg3YTk0NzUzNWY4
MTk2ZGVjNDE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFz
c1JlZlB0ciB0byBkaXNwYXRjaEV2ZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFN0b3AgcGFzc2luZyBhIFBhc3NSZWZQdHIgdG8gZGlzcGF0Y2hF
dmVudCgpIGJlY2F1c2U6CisgICAgICAgIDEuIFBhc3NSZWZQdHIgaXMgbGVnYWN5IGFuZCBzaG91
bGQgbm8gbG9uZ2VyIGJlIHVzZWQKKyAgICAgICAgMi4gV2UgZG9uJ3QgYWN0dWFsbHkgdHJhbnNm
ZXIgb3duZXJzaGlwIG9mIHRoZSBFdmVudCB0byB0aGUgY2FsbGVlCisKKyAgICAgICAgUGFzcyBh
IEMrKyByZWZlcmVuY2UgaW5zdGVhZC4KKwogMjAxNS0xMS0xMSAgWGFiaWVyIFJvZHJpZ3VleiBD
YWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gUmVt
b3ZlIGJpbmQgdXNhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVy
eS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeUNvbnRyb2xsZXIuY3BwCmluZGV4IGNmODJhMzU1MjljZTMwODA3ZDE2OTA2OWU1ZDdh
ZmNiOGE0MWJkOWUuLjI1MjE1Yzk3MDQ2Y2U5ZmUyYmZhYjFlMGI0ZDAxZDE0YWIxMzViOGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9s
bGVyLmNwcApAQCAtODQsNyArODQsNyBAQCB2b2lkIEJhdHRlcnlDb250cm9sbGVyOjp1cGRhdGVC
YXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YQogCiB2b2lk
IEJhdHRlcnlDb250cm9sbGVyOjpkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMp
CiB7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBm
YWxzZSwgZmFsc2UpOworICAgIFJlZjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50
VHlwZSwgZmFsc2UsIGZhbHNlKTsKICAgICBSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeSA9
IGJhdHRlcnlTdGF0dXM7CiAgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzKQog
ICAgICAgICBsaXN0ZW5lci0+ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudCwgYmF0dGVyeSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNw
cAppbmRleCAzYzFlYTc3NDU2ZjRkMmE5Njc3N2U0OWRjNjUwMTE0YTI4NjY1ZjYyLi5kNmQxODBl
ODU1NjBhY2QzZjdjNzljYjU1Nzc0YTgwNDEwNzljMmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAKQEAgLTc3LDcgKzc3LDcgQEAg
ZG91YmxlIEJhdHRlcnlNYW5hZ2VyOjpsZXZlbCgpCiAgICAgcmV0dXJuIG1fYmF0dGVyeVN0YXR1
cyA/IG1fYmF0dGVyeVN0YXR1cy0+bGV2ZWwoKSA6IDE7CiB9CiAKLXZvaWQgQmF0dGVyeU1hbmFn
ZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NS
ZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YXR1cykKK3ZvaWQgQmF0dGVyeU1hbmFnZXI6
OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoRXZlbnQmIGV2ZW50LCBQYXNzUmVmUHRyPEJhdHRlcnlT
dGF0dXM+IGJhdHRlcnlTdGF0dXMpCiB7CiAgICAgdXBkYXRlQmF0dGVyeVN0YXR1cyhiYXR0ZXJ5
U3RhdHVzKTsKICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKaW5kZXggNzlhMDFmOTM2OWIwNjM5ODhm
NmJjMjdjNjk2OGM3NTU0ZThjZGRhZi4uZDRlM2QyNjE1ZTI2MTIwODQ3MDVhZDYyYjUxY2I1MzJh
MDhjMjkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRl
cnlNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlN
YW5hZ2VyLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSBkaXNjaGFyZ2lu
Z1RpbWUoKTsKICAgICBkb3VibGUgbGV2ZWwoKTsKIAotICAgIHZvaWQgZGlkQ2hhbmdlQmF0dGVy
eVN0YXR1cyhQYXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7Cisg
ICAgdm9pZCBkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKEV2ZW50JiwgUGFzc1JlZlB0cjxCYXR0ZXJ5
U3RhdHVzPik7CiAgICAgdm9pZCB1cGRhdGVCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8QmF0dGVy
eVN0YXR1cz4pOwogICAgIHZvaWQgYmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKSB7IG1fYmF0
dGVyeUNvbnRyb2xsZXIgPSBudWxscHRyOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGI4OGVkZTU4
ZDgxZTQwNmM4MDJlNTNlOGE0MTg3NDliZDEzMzdhOTkuLmY4MWYzNjU4MmQ3ZGJmZjUyNWU4Y2U4
N2I5ZjA1NzM4MjcxYjQ4MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMzYsMzAgKzM2LDMwIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
KEV2ZW50KiBldmVudCwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+JiBldmVudFRhcmdldHMp
Citib29sIElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goRXZlbnQmIGV2ZW50LCBWZWN0b3I8
UmVmUHRyPEV2ZW50VGFyZ2V0Pj4mIGV2ZW50VGFyZ2V0cykKIHsKICAgICBzaXplX3Qgc2l6ZSA9
IGV2ZW50VGFyZ2V0cy5zaXplKCk7CiAgICAgQVNTRVJUKHNpemUpOwogCi0gICAgZXZlbnQtPnNl
dEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7CisgICAgZXZlbnQuc2V0RXZlbnRQ
aGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6ZSAt
IDE7IGk7IC0taSkgeyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgZXZl
bnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZl
bnQuc2V0Q3VycmVudFRhcmdldChldmVudFRhcmdldHNbaV0uZ2V0KCkpOwogICAgICAgICBldmVu
dFRhcmdldHNbaV0tPmZpcmVFdmVudExpc3RlbmVycyhldmVudCk7Ci0gICAgICAgIGlmIChldmVu
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgICAgIGlmIChldmVudC5wcm9wYWdhdGlvblN0
b3BwZWQoKSkKICAgICAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogICAgIH0KIAotICAg
IGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwotICAgIGV2ZW50LT5zZXRD
dXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1swXS5nZXQoKSk7CisgICAgZXZlbnQuc2V0RXZlbnRQ
aGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50
VGFyZ2V0c1swXS5nZXQoKSk7CiAgICAgZXZlbnRUYXJnZXRzWzBdLT5maXJlRXZlbnRMaXN0ZW5l
cnMoZXZlbnQpOwotICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgIWV2ZW50
LT5idWJibGVzKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQorICAgIGlmIChldmVudC5wcm9w
YWdhdGlvblN0b3BwZWQoKSB8fCAhZXZlbnQuYnViYmxlcygpIHx8IGV2ZW50LmNhbmNlbEJ1YmJs
ZSgpKQogICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKIAotICAgIGV2ZW50LT5zZXRFdmVu
dFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShF
dmVudDo6QlVCQkxJTkdfUEhBU0UpOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsg
KytpKSB7IC8vIERvbid0IGRvIHRoZSBmaXJzdCBlbGVtZW50LgotICAgICAgICBldmVudC0+c2V0
Q3VycmVudFRhcmdldChldmVudFRhcmdldHNbaV0uZ2V0KCkpOworICAgICAgICBldmVudC5zZXRD
dXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1tpXS5nZXQoKSk7CiAgICAgICAgIGV2ZW50VGFyZ2V0
c1tpXS0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKLSAgICAgICAgaWYgKGV2ZW50LT5wcm9w
YWdhdGlvblN0b3BwZWQoKSB8fCBldmVudC0+Y2FuY2VsQnViYmxlKCkpCisgICAgICAgIGlmIChl
dmVudC5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBldmVudC5jYW5jZWxCdWJibGUoKSkKICAgICAg
ICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogICAgIH0KIApAQCAtODIsOSArODIsOSBAQCBi
b29sIElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goRXZlbnQqIGV2ZW50LCBWZWN0b3I8UmVm
UHRyPEV2ZW50VGFyZ2V0Pj4mIGV2ZQogICAgIC8vICAgICAgICBldmVudCBvbiB0aGUgd2luZG93
IHVudGlsIHRoYXQgaGFzIGJlZW4gaW1wbGVtZW50ZWQpLiIgLS0gSm9uYXMgU2lja2luZwogCiBk
b25lRGlzcGF0Y2hpbmc6Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQobnVsbHB0cik7Ci0g
ICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoMCk7Ci0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpOworICAgIGV2ZW50LnNldEN1cnJlbnRUYXJnZXQobnVsbHB0cik7CisgICAgZXZl
bnQuc2V0RXZlbnRQaGFzZSgwKTsKKyAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaAppbmRleCBhNDYzOTNlZDg2
YzRhNjFlNTY5NjQ1Yzk2YzkxYzU1MDgyNjRlZmZmLi5lZDU5NTk3NWFjYjY1YWQ2NzJmNTI4OTlh
ZDAyZjNhZjNmMzM1MDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBFdmVu
dFRhcmdldDsKIAogY2xhc3MgSURCRXZlbnREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgYm9vbCBkaXNwYXRjaChFdmVudCosIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYpOyAv
LyBUaGUgdGFyZ2V0IGZpcnN0IGFuZCB0aGVuIGl0cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93
IHRoZSBldmVudCBidWJibGVzLgorICAgIHN0YXRpYyBib29sIGRpc3BhdGNoKEV2ZW50JiwgVmVj
dG9yPFJlZlB0cjxFdmVudFRhcmdldD4+Jik7IC8vIFRoZSB0YXJnZXQgZmlyc3QgYW5kIHRoZW4g
aXRzIGFuY2VzdG9ycyBpbiBvcmRlciBvZiBob3cgdGhlIGV2ZW50IGJ1YmJsZXMuCiAKIHByaXZh
dGU6CiAgICAgSURCRXZlbnREaXNwYXRjaGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCmluZGV4
IGRiZTAwMGY1NzE0YWUyODhmMDYzNDgyM2VjNjM1ZmYxODQ0YzgxYjMuLjYxYjE3N2M4OTg4ZmQ3
NjNmZWQ4MjI0MThkMTMwZjY5OTU0Mjc5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCkBAIC0z
MzEsNyArMzMxLDcgQEAgdm9pZCBJREJEYXRhYmFzZTo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudCh1
aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQogICAgIAogICAgIFJlZjxFdmVudD4gZXZlbnQgPSBJ
REJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShjdXJyZW50VmVyc2lvbiwgcmVxdWVzdGVkVmVy
c2lvbiwgZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7CiAgICAgZXZlbnQtPnNldFRh
cmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5l
bnF1ZXVlRXZlbnQoYWRvcHRSZWYoJmV2ZW50LmxlYWtSZWYoKSkpOworICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQp
KTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZTo6ZGlkQ3JlYXRlSW5kZXhJbmZvKGNvbnN0IElEQklu
ZGV4SW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwCmluZGV4IDc1Yjk2NWQ5MGQwMTllMGY1
NjhjNDNjN2ZkOGY5NWMxMWM5ZWVlZWMuLjk4YWVhZDVlOWQxNWZhMTZmYWE2N2FmOGIxMzI2MWZh
Y2UyZjlmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcApAQCAtMTk0LDE2ICsxOTQsMTQgQEAgdm9p
ZCBJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudCgmZXZlbnQuZ2V0KCkpOworICAg
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEY6
Om1vdmUoZXZlbnQpKTsKIH0KIAotYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQorYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2
ZW50JiBldmVudCkKIHsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hF
dmVudCAtICVzIiwgcHJwRXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCAtICVzIiwgZXZlbnQudHlwZSgpLmNo
YXJhY3RlcnM4KCkpOwogCi0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwotCi0g
ICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKKyAgICBp
ZiAoZXZlbnQudHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCiAgICAgICAgIG1f
cmVhZHlTdGF0ZSA9IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lOwogCiAgICAgVmVjdG9yPFJl
ZlB0cjxFdmVudFRhcmdldD4+IHRhcmdldHM7CkBAIC0yMTcsNyArMjE1LDcgQEAgYm9vbCBJREJS
ZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgIGJv
b2wgZG9udFByZXZlbnREZWZhdWx0OwogICAgIHsKICAgICAgICAgVHJhbnNhY3Rpb25BY3RpdmF0
b3IgYWN0aXZhdG9yKG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgICAgICBkb250UHJldmVudERl
ZmF1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRz
KTsKKyAgICAgICAgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaChldmVudCwgdGFyZ2V0cyk7CiAgICAgfQogCiAgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkg
PSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJSZXF1ZXN0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQlJlcXVlc3RJbXBsLmgKaW5kZXggYTQyYjE3YjQ0M2M0MWM4M2NhOGVmOWQ2ZWQ0
MDIzMzhmNDI2OTJjOC4uMjkwZTM5YzViZDNjOTZjNjE4YzU5OGZmODQwODQwMDUzZmMwM2Y0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJl
cXVlc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQlJlcXVlc3RJbXBsLmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8SURCUmVxdWVzdD46OmRlcmVmOwogCiAgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVm
PEV2ZW50PiYmKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50Pikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZl
bnQmKSBvdmVycmlkZSBmaW5hbDsKIAogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVj
dGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwu
Y3BwCmluZGV4IDBkYzFjNGY1OGU0NjIyOWVjMTdiNTE1YjAxYjMxZDYyYmU0NmMwNjAuLjRhNDcx
OTRjMzQ5OTkzOTBhN2M5N2JhZjQyM2JlNGU3YTlkMTBmZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlv
bkltcGwuY3BwCkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZmlyZU9u
QWJvcnQoKQogICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50LCB0cnVlLCBmYWxzZSkpOwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVl
RXZlbnQoUmVmPEV2ZW50PiBldmVudCkKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVu
dChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZCk7CiAKQEAgLTM1NCwyMiArMzU0LDIyIEBAIHZv
aWQgSURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudChSZWY8RXZlbnQ+IGV2ZW50KQogICAgICAg
ICByZXR1cm47CiAKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudCgmZXZlbnQuZ2V0KCkpOwor
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChX
VEY6Om1vdmUoZXZlbnQpKTsKIH0KIAotYm9vbCBJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNo
RXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6ZGlzcGF0Y2hFdmVudCIpOwogCiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsKLSAgICBBU1NFUlQoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKKyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkg
PT0gdGhpcyk7CisgICAgQVNTRVJUKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxl
dGVFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwogCiAg
ICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRhcmdldHM7CiAgICAgdGFyZ2V0cy5hcHBl
bmQodGhpcyk7CiAgICAgdGFyZ2V0cy5hcHBlbmQoZGIoKSk7CiAKLSAgICByZXR1cm4gSURCRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7CisgICAgcmV0dXJu
IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogfQogCiBSZWY8
SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJ
REJPYmplY3RTdG9yZUluZm8mIGluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKaW5kZXggYjNk
N2IzY2MzNjZkNThhYTdhNDRhMThkMzJhNzc2OWRiNmU3ZDUxYy4uMDQzNjE5NTkwYzI2NzE0MWEw
NzczNWQ1YzFkN2IxOTEwMjc2OTM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaApAQCAtNzEs
NyArNzEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3Zl
cnJpZGUgZmluYWwgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0
KCkgb3ZlcnJpZGUgZmluYWwgeyBkZXJlZigpOyB9CiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRp
c3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4pIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2
ZW50Jikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGFjdGl2ZURP
TU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
U3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwpAQCAtMTI4LDcgKzEy
OCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpcmVPbkNvbXBsZXRlKCk7CiAgICAgdm9pZCBm
aXJlT25BYm9ydCgpOwotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4pOworICAgIHZv
aWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAKICAgICBSZWY8SURCUmVxdWVzdD4gcmVx
dWVzdEluZGV4UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4
ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lE
YXRhYmFzZS5jcHAKaW5kZXggYjAxNGU2NjIxZDIwZDExM2MxYzcxNGMzMWE3MWQ5NmY4MzFmODQy
ZC4uZDAzZjEyOGNkMzExZWQyMjliZGMzNGM3YzAxZTVjZTBlMTFiNjdjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0
YWJhc2UuY3BwCkBAIC05Miw3ICs5Miw3IEBAIExlZ2FjeURhdGFiYXNlOjp+TGVnYWN5RGF0YWJh
c2UoKQogICAgICAgICAvLyBjb25uZWN0aW9uIGNhbGxlZCBzZXRWZXJzaW9uLCBidXQgdGhlIGZy
b250ZW5kIGNvbm5lY3Rpb24gaXMgYmVpbmcKICAgICAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5
IGNvdWxkIGZpcmUuCiAgICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRz
KQotICAgICAgICAgICAgY29udGV4dC0+ZXZlbnRRdWV1ZSgpLmNhbmNlbEV2ZW50KCpldmVudCk7
CisgICAgICAgICAgICBjb250ZXh0LT5ldmVudFF1ZXVlKCkuY2FuY2VsRXZlbnQoZXZlbnQpOwog
ICAgIH0KIH0KIApAQCAtMzIxLDcgKzMyMSw3IEBAIHZvaWQgTGVnYWN5RGF0YWJhc2U6OmNsb3Nl
Q29ubmVjdGlvbigpCiAgICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRo
ZSBmcm9udGVuZCBjb25uZWN0aW9uIGlzIGJlaW5nCiAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5
IGNvdWxkIGZpcmUuCiAgICAgZm9yIChhdXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsK
LSAgICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOwor
ICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKICAgICB9CiAKQEAgLTM0MSwy
NSArMzQxLDI1IEBAIHZvaWQgTGVnYWN5RGF0YWJhc2U6Om9uVmVyc2lvbkNoYW5nZSh1aW50NjRf
dCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKQogICAgIGVucXVldWVFdmVudChMZWdh
Y3lWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVu
dE5hbWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50KSk7CiB9CiAKLXZvaWQgTGVnYWN5RGF0YWJhc2U6
OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgTGVnYWN5RGF0YWJh
c2U6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKCFtX2Nv
bnRleHRTdG9wcGVkKTsKICAgICBBU1NFUlQoIW1faXNDbG9zZWQpOwogICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50
LmdldCgpKTsKLSAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVuZChldmVudCk7CisgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmNvcHlS
ZWYoKSk7CisgICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9
CiAKLWJvb2wgTGVnYWN5RGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCitib29sIExlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkK
IHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7
Ci0gICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VF
dmVudCk7CisgICAgQVNTRVJUKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudmVyc2lvbmNo
YW5nZUV2ZW50KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0g
ZXZlbnQuZ2V0KCkpCisgICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLnB0cigpID09ICZl
dmVudCkKICAgICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwogICAgIH0KLSAg
ICByZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIHJl
dHVybiBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIGludDY0X3QgTGVn
YWN5RGF0YWJhc2U6OmZpbmRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdh
Y3lEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeURhdGFiYXNlLmgKaW5kZXggMTEzN2U1ZTMwMDI0NDE4MWUyMThlNDlmM2Q1N2JiN2NkNThl
Njc3ZC4uZWExZWI1ZjIzZGEwZjU2NmQ5NjMzNjhhNjhiYzMxYWY0NGZkYjI2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURh
dGFiYXNlLmgKQEAgLTg0LDEwICs4NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Nsb3NlUGVu
ZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VQZW5kaW5nOyB9CiAgICAgdm9pZCBmb3JjZUNs
b3NlKCk7CiAgICAgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWV0YWRhdGE7IH0KLSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2
ZW50Pik7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKIAogICAgIHVzaW5n
IEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0
Y2hFdmVudChFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgaW50NjRfdCBmaW5kT2JqZWN0U3RvcmVJ
ZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToK
IAogICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIHZlcnNpb25jaGFuZ2UgZXZlbnRzIHdhaXRpbmcg
dG8gYmUgZmlyZWQgb24gdGhpcwogICAgIC8vIGRhdGFiYXNlIHNvIHRoYXQgd2UgY2FuIGNhbmNl
bCB0aGVtIGlmIHRoZSBkYXRhYmFzZSBjbG9zZXMuCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+
IG1fZW5xdWV1ZWRFdmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVu
dHM7CiAKICAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFj
a3M7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwCmluZGV4IDMyOTBjNTBmMDQyZTkw
ZWYyZWFiYTcyNzU4MGU3MjM5MzQ4MjY1NmQuLjcyMTdiYzNlNGRhNzJiYzZiNGM3NmVlZDk1YWY3
NzE1YzQ2MWFkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKQEAgLTEzOCwxMSAr
MTM4LDExIEBAIGJvb2wgTGVnYWN5T3BlbkRCUmVxdWVzdDo6c2hvdWxkRW5xdWV1ZUV2ZW50KCkg
Y29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lPcGVuREJSZXF1ZXN0Ojpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBMZWdhY3lPcGVuREJS
ZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICAvLyBJZiB0aGUgY29u
bmVjdGlvbiBjbG9zZWQgYmV0d2VlbiBvblVwZ3JhZGVOZWVkZWQgYW5kIHRoZSBkZWxpdmVyeSBv
ZiB0aGUgInN1Y2Nlc3MiIGV2ZW50LAogICAgIC8vIGFuICJlcnJvciIgZXZlbnQgc2hvdWxkIGJl
IGZpcmVkIGluc3RlYWQuCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1
Y2Nlc3NFdmVudCAmJiBtX3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCRGF0YWJh
c2UgJiYgbV9yZXN1bHQtPmxlZ2FjeURhdGFiYXNlKCktPmlzQ2xvc2VQZW5kaW5nKCkpIHsKKyAg
ICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgJiYgbV9yZXN1
bHQtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkRhdGFiYXNlICYmIG1fcmVzdWx0LT5sZWdh
Y3lEYXRhYmFzZSgpLT5pc0Nsb3NlUGVuZGluZygpKSB7CiAgICAgICAgIG1fcmVzdWx0ID0gbnVs
bHB0cjsKICAgICAgICAgb25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmgKaW5kZXggNWE1
OTNiNWY2ZWFjNzBkYjdkMzAyYjA2ZTg5Y2ViZTM4NDhkZTQ1Zi4uNjRmNjZjNDBiMDc4MzM1Njcx
YTNhYjhkYjhiOWRlN2JkY2FjYmFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCkBAIC00
OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBF
dmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsOwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYp
IG92ZXJyaWRlIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEVu
cXVldWVFdmVudCgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCmluZGV4IGEzYzIw
MjBiMDAwYjczNGVkNmNhN2EzM2VlMzk2ZWQ4OGE4ZWU1MWMuLjJjNzQ3YTU2YWFhZDUzY2Y3ZDRk
M2EzZGQwODRmOGQ1ZjMyYTlhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKQEAgLTE2Niw3ICsxNjYs
NyBAQCB2b2lkIExlZ2FjeVJlcXVlc3Q6OmFib3J0KCkKIAogICAgIEV2ZW50UXVldWUmIGV2ZW50
UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKICAgICBmb3Ig
KGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykgewotICAgICAgICBib29sIHJlbW92ZWQg
PSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50KCpldmVudCk7CisgICAgICAgIGJvb2wgcmVtb3ZlZCA9
IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoZXZlbnQpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
bW92ZWQsIHJlbW92ZWQpOwogICAgIH0KICAgICBtX2VucXVldWVkRXZlbnRzLmNsZWFyKCk7CkBA
IC0yNjIsNyArMjYyLDcgQEAgdm9pZCBMZWdhY3lSZXF1ZXN0OjpvbkVycm9yKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiAgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIHRydWUpKTsKIH0KIAotc3RhdGljIFBhc3NS
ZWZQdHI8RXZlbnQ+IGNyZWF0ZVN1Y2Nlc3NFdmVudCgpCitzdGF0aWMgUmVmPEV2ZW50PiBjcmVh
dGVTdWNjZXNzRXZlbnQoKQogewogICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiB9CkBAIC00NjYsNyArNDY2LDcgQEAgRXZl
bnRUYXJnZXRJbnRlcmZhY2UgTGVnYWN5UmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdAogICAgIHJldHVybiBJREJSZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQog
Ci1ib29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQpCitib29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewog
ICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCIpOwogICAg
IEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRpbmcpOwpA
QCAtNDc0LDE2ICs0NzQsMTYgQEAgYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7
CiAgICAgQVNTRVJUKG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpKTsKICAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpID09IHRoaXMp
OwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZWFkeVN0YXRlIDwgSURCUmVxdWVzdFJlYWR5
U3RhdGU6OkRvbmUsICJXaGVuIGRpc3BhdGNoaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgPCBE
T05FKCVkKSwgd2FzICVkIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBz
dGF0aWNfY2FzdDxpbnQ+KElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKSwgc3RhdGljX2Nhc3Q8
aW50PihtX3JlYWR5U3RhdGUpKTsKKyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7
CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3JlYWR5U3RhdGUgPCBJREJSZXF1ZXN0UmVhZHlT
dGF0ZTo6RG9uZSwgIldoZW4gZGlzcGF0Y2hpbmcgZXZlbnQgJXMsIG1fcmVhZHlTdGF0ZSA8IERP
TkUoJWQpLCB3YXMgJWQiLCBldmVudC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSksIHN0YXRpY19jYXN0PGlu
dD4obV9yZWFkeVN0YXRlKSk7CiAKICAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1f
cmVxdWVzdFN0YXRlKTsKIAotICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5i
bG9ja2VkRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tl
ZEV2ZW50KQogICAgICAgICBtX3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9u
ZTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVudC5n
ZXQoKSkKKyAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0ucHRyKCkgPT0gJmV2ZW50KQog
ICAgICAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5yZW1vdmUoaSk7CiAgICAgfQogCkBAIC01MDAs
NyArNTAwLDcgQEAgYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50KQogCiAgICAgLy8gQ3Vyc29yIHByb3BlcnRpZXMgc2hvdWxkIG5vdCB1cGRh
dGVkIHVudGlsIHRoZSBzdWNjZXNzIGV2ZW50IGlzIGJlaW5nIGRpc3BhdGNoZWQuCiAgICAgUmVm
UHRyPExlZ2FjeUN1cnNvcj4gY3Vyc29yVG9Ob3RpZnk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCkgewogICAgICAgICBjdXJzb3JUb05vdGlmeSA9IGdl
dFJlc3VsdEN1cnNvcigpOwogICAgICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpIHsKICAgICAgICAg
ICAgIGN1cnNvclRvTm90aWZ5LT5zZXRWYWx1ZVJlYWR5KHJlcXVlc3RTdGF0ZSgpLCBtX2N1cnNv
cktleS5yZWxlYXNlKCksIG1fY3Vyc29yUHJpbWFyeUtleS5yZWxlYXNlKCksIG1fY3Vyc29yVmFs
dWUpOwpAQCAtNTA4LDE5ICs1MDgsMTkgQEAgYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkgeworICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkgewog
ICAgICAgICBBU1NFUlQoIW1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudCk7CiAgICAgICAgIG1f
ZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudCA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gRklYTUU6
IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFi
bHkgbmVlZCB0byBjaGFuZ2UuCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuZXJyb3JFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2Vk
RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50
LCAiZXZlbnQgdHlwZSB3YXMgJXMiLCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwotICAgIGNvbnN0IGJvb2wgc2V0VHJhbnNhY3Rpb25BY3RpdmUgPSBtX3RyYW5zYWN0aW9u
ICYmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50IHx8IChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYmIG1fZXJyb3JDb2RlICE9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5i
bG9ja2VkRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVk
RXZlbnQsICJldmVudCB0eXBlIHdhcyAlcyIsIGV2ZW50LnR5cGUoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICBjb25zdCBib29sIHNldFRyYW5zYWN0aW9uQWN0aXZlID0gbV90cmFuc2Fj
dGlvbiAmJiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZl
bnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQgfHwgKGV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBtX2Vycm9yQ29kZSAhPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogCiAgICAgaWYgKHNldFRyYW5zYWN0aW9uQWN0
aXZlKQogICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRBY3RpdmUodHJ1ZSk7CiAKLSAgICBib29s
IGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQu
Z2V0KCksIHRhcmdldHMpOworICAgIGJvb2wgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaChldmVudCwgdGFyZ2V0cyk7CiAKICAgICBpZiAobV90cmFuc2Fj
dGlvbikgewogICAgICAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRl
OjpEb25lKQpAQCAtNTI4LDcgKzUyOCw3IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIAogICAgICAgICAvLyBQb3NzaWJseSBhYm9y
dCB0aGUgdHJhbnNhY3Rpb24uIFRoaXMgbXVzdCBvY2N1ciBhZnRlciB1bnJlZ2lzdGVyaW5nIChz
byB0aGlzIHJlcXVlc3QKICAgICAgICAgLy8gZG9lc24ndCByZWNlaXZlIGEgc2Vjb25kIGVycm9y
KSBhbmQgYmVmb3JlIGRlYWN0aXZhdGluZyAod2hpY2ggbWlnaHQgdHJpZ2dlciBjb21taXQpLgot
ICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBk
b250UHJldmVudERlZmF1bHQgJiYgIW1fcmVxdWVzdEFib3J0ZWQpIHsKKyAgICAgICAgaWYgKGV2
ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBkb250UHJldmVudERlZmF1
bHQgJiYgIW1fcmVxdWVzdEFib3J0ZWQpIHsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNl
dEVycm9yKG1fZXJyb3IsIG1fZXJyb3JNZXNzYWdlKTsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rp
b24tPmFib3J0KElHTk9SRV9FWENFUFRJT04pOwogICAgICAgICB9CkBAIC01NDEsNyArNTQxLDcg
QEAgYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQogICAgIGlmIChjdXJzb3JUb05vdGlmeSkKICAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnBv
c3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCk7CiAKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IElE
QlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lICYmICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JG
aW5pc2hlZCkgJiYgZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2
ZW50KQorICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUg
JiYgKCFjdXJzb3JUb05vdGlmeSB8fCBtX2N1cnNvckZpbmlzaGVkKSAmJiBldmVudC50eXBlKCkg
IT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkKICAgICAgICAgbV9oYXNQZW5kaW5n
QWN0aXZpdHkgPSBmYWxzZTsKIAogICAgIHJldHVybiBkb250UHJldmVudERlZmF1bHQ7CkBAIC01
NjUsNyArNTY1LDcgQEAgdm9pZCBMZWdhY3lSZXF1ZXN0Ojp0cmFuc2FjdGlvbkRpZEZpbmlzaEFu
ZERpc3BhdGNoKCkKICAgICBtX3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVu
ZGluZzsKIH0KIAotdm9pZCBMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCit2b2lkIExlZ2FjeVJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+
JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlT
dGF0ZTo6UGVuZGluZyB8fCBtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRv
bmUpOwogCkBAIC01NzYsOCArNTc2LDggQEAgdm9pZCBMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMp
OwogCi0gICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVl
dWVFdmVudChldmVudC5nZXQoKSkpCi0gICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2
ZW50KTsKKyAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5x
dWV1ZUV2ZW50KGV2ZW50LmNvcHlSZWYoKSkpCisgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBw
ZW5kKFdURjo6bW92ZShldmVudCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVx
dWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJl
cXVlc3QuaAppbmRleCA1YWVmYjExZDIyODJjNzc4MWZhNmY5ZDY4NjdlNjg4NTZmNTc5ODMxLi5l
YjFmYmFlZjJhZTYyNjVlMzIxN2JiYWNlNWYxYzA3ZTVmZDFiY2JjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmgK
QEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdodEV4Y2Vw
dGlvbkluRXZlbnRIYW5kbGVyKCkgb3ZlcnJpZGUgZmluYWw7CiAKICAgICB1c2luZyBFdmVudFRh
cmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQo
RXZlbnQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgdHJhbnNhY3Rpb25EaWRGaW5pc2hBbmREaXNw
YXRjaCgpOwogCkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAg
TGVnYWN5UmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxMZWdhY3lB
bnk+IHNvdXJjZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgTGVnYWN5VHJhbnNhY3Rp
b24qKTsKLSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9p
ZCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5x
dWV1ZUV2ZW50KCkgY29uc3Q7CiAgICAgdm9pZCBvblN1Y2Nlc3NJbnRlcm5hbChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwogICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwcml2YXRl
OgogICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKIAog
ICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZpdHk7Ci0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+
IG1fZW5xdWV1ZWRFdmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVu
dHM7CiAKICAgICAvLyBPbmx5IHVzZWQgaWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJz
b3IuCiAgICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJh
bnNhY3Rpb24uY3BwCmluZGV4IGYwYjM0YTBkZTgyNjU4ODhjMGE0ZDM4YTYxYWVlMTlkYjY0Y2I3
YjEuLmNlODQ5ZmQzZjc2NGE0NWZlODAxY2FkZTIxMDZkZWQwMTVlM2I0ZWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eVRyYW5zYWN0aW9uLmNwcApAQCAtMzA2LDEzICszMDYsMTMgQEAgYm9vbCBMZWdhY3lUcmFuc2Fj
dGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICByZXR1cm4gbV9oYXNQZW5kaW5n
QWN0aXZpdHkgJiYgIW1fY29udGV4dFN0b3BwZWQ7CiB9CiAKLWJvb2wgTGVnYWN5VHJhbnNhY3Rp
b246OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeVRy
YW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coU3RvcmFn
ZUFQSSwgIkxlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50Iik7CiAgICAgQVNTRVJUKG1f
c3RhdGUgIT0gRmluaXNoZWQpOwogICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CiAg
ICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50
YXJnZXQoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7CiAg
ICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwogCiAgICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4K
QEAgLTMyOCw4ICszMjgsOCBAQCBib29sIExlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOwogCiAg
ICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlz
IHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCi0gICAgQVNTRVJUKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuYWJvcnRFdmVudCk7Ci0gICAgYm9vbCByZXR1cm5WYWx1ZSA9IElEQkV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAgIEFTU0VSVChldmVudC50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKKyAgICBib29sIHJldHVyblZhbHVlID0gSURCRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaChldmVudCwgdGFyZ2V0cyk7CiAgICAgLy8gRklYTUU6IFRyeSB0
byBjb25zdHJ1Y3QgYSB0ZXN0IHdoZXJlIHx0aGlzfCBvdXRsaXZlcyBvcGVuREJSZXF1ZXN0IGFu
ZCB3ZQogICAgIC8vIGdldCBhIGNyYXNoLgogICAgIGlmIChtX29wZW5EQlJlcXVlc3QpIHsKQEAg
LTM1OSwxNCArMzU5LDE0IEBAIGNvbnN0IGNoYXIqIExlZ2FjeVRyYW5zYWN0aW9uOjphY3RpdmVE
T01PYmplY3ROYW1lKCkgY29uc3QKICAgICByZXR1cm4gIkxlZ2FjeVRyYW5zYWN0aW9uIjsKIH0K
IAotdm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50KQordm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4m
JiBldmVudCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fc3RhdGUgIT0gRmluaXNoZWQs
ICJBIGZpbmlzaGVkIHRyYW5zYWN0aW9uIHRyaWVkIHRvIGVucXVldWUgYW4gZXZlbnQgb2YgdHlw
ZSAlcy4iLCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGlmICht
X2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50KTsKKyAgICBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2
ZW50KSk7CiB9CiAKIElEQkRhdGFiYXNlQmFja2VuZCogTGVnYWN5VHJhbnNhY3Rpb246OmJhY2tl
bmREQigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5oCmluZGV4IDgzYjc5NzExNWU3OWI3ZWYx
YmNjYzVhYTQwMzcwZTIzNzVhZTk0MjIuLmY3OWRlYzMzMzk1ZGEyYTViZDY2MzNhNjIzYzgzYTNm
OTcwNzU1NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5oCkBAIC05Niw3ICs5Niw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3Bh
dGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50
Jikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICAvLyBBY3RpdmVET01PYmplY3QKICAgICB2aXJ0dWFs
IGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CkBAIC0xMDQs
NyArMTA0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBMZWdhY3lUcmFuc2FjdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgaW50NjRfdCwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZSwgTGVnYWN5RGF0YWJhc2UqLCBMZWdhY3lPcGVuREJSZXF1
ZXN0KiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpOwogCi0gICAgdm9pZCBlbnF1ZXVlRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4m
Jik7CiAgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVyT3Bl
bkN1cnNvcihMZWdhY3lDdXJzb3IqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKaW5kZXggYzNjYzM4MWE4OGEwMmE4ODI3MWZkYjdk
NDI1NTFhMDNlZGM1MTc4Yi4uZDVmYmRiZmIwZjYzYjk0ZmI4YTUyNjk0MWFhMzM4OTkxZDE0NWZk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbS5jcHAKQEAgLTMwMyw3ICszMDMsNyBAQCB2b2lkIE1lZGlhU3RyZWFtOjphY3Rpdml0eUV2
ZW50VGltZXJGaXJlZCgpCiAgICAgZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRBY3Rpdml0eUV2ZW50
cyk7CiAKICAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2
ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIAog
ICAgIGV2ZW50cy5jbGVhcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAKaW5kZXggNTI3YjVkMTlkOTA4ZDRhM2UxNjBl
MzViYmViN2FhOTg4YmNkNWQ5OS4uOWExNWNiYjAzZDIxNWI2MDk4YzcyMWU0OGZkNjYwY2M4OWU2
ODNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENE
VE1GU2VuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q0RUTUZTZW5kZXIuY3BwCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBSVENEVE1GU2VuZGVyOjpz
Y2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAgIGV2ZW50cy5zd2FwKG1fc2NoZWR1bGVkRXZl
bnRzKTsKIAogICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHMpCi0gICAgICAgIGRpc3BhdGNo
RXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCmluZGV4IGQ3NzA4Y2EwNWJlYWQx
NDE2NzdmYzg0NWE5YzMzNzZlNjQ0ZmQzMTQuLmI2N2E2ZDkxNGQyNzk5MGU3YTMzMDA5NGEwZGUz
N2MzZGQ1Zjc4YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDRGF0YUNoYW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCkBAIC0zMjEsNyArMzIxLDcgQEAgdm9pZCBSVENEYXRh
Q2hhbm5lbDo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKCkKICAgICBldmVudHMuc3dhcChtX3Nj
aGVkdWxlZEV2ZW50cyk7CiAKICAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQotICAgICAg
ICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQo
KmV2ZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRl
eCBkZDQ2NDFlMWI4ZGEzMmRhNzE0ZjM0NjgxMzM5NjdjNTgxYTQzZTY1Li5mZjVhYWU0NDY0NWYz
NGE5NTVkZjE0M2IxOWY3YmE1ZGVlZmYzMzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtNzQyLDcg
Kzc0Miw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJl
ZCgpCiAgICAgZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCiAgICAgZm9yIChhdXRv
JiBldmVudCA6IGV2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkp
OworICAgICAgICBkaXNwYXRjaEV2ZW50KCpldmVudCk7CiAKICAgICBldmVudHMuY2xlYXIoKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQppbmRleCBlNDUzMmM4YTE1ZmQ1NjI5ZDJhMTg1ODhm
OTdiMTU0YTIwOGYwZGJjLi42YzgzZWRjZWE1MDhlMzNiNmY2NDc2M2E3ODllYTc1MzJhNDE0ZDM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCkBAIC0yNDMsOCArMjQzLDggQEAgdW5zaWduZWQg
bG9uZyBsb25nIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojptb3ZpZVNpemUoKSBjb25zdAog
dm9pZCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cG9zdEV2ZW50KGNvbnN0IFN0cmluZyYg
ZXZlbnROYW1lKQogewogICAgIFJlZjxIVE1MUGx1Z0luRWxlbWVudD4gcHJvdGVjdCgqbV9wYXJl
bnRFbGVtZW50KTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWUsIGZhbHNlLCB0cnVlKTsKLSAgICBtX3BhcmVudEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQo
ZXZlbnQuZ2V0KCkpOworICAgIFJlZjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZSwgZmFsc2UsIHRydWUpOworICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChl
dmVudCk7CiB9CiAKICNpZiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3Byb3hpbWl0eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3Bw
CmluZGV4IDYwNzhmMzdmYjhkM2I5MWU0ZWE3NmI0MGYzYjI0MGNiMDJkZTEzZmIuLjRjYWRiOTcw
YWQ3YTI4MWY4MjYxNzhmOGRjN2UwNWJmMjQ5ZWE4OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xs
ZXIuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIGJvb2wgRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6
aGFzTGFzdERhdGEoKQogICAgIHJldHVybiBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+aGFzTGFz
dERhdGEoKTsKIH0KIAotUGFzc1JlZlB0cjxFdmVudD4gRGV2aWNlUHJveGltaXR5Q29udHJvbGxl
cjo6Z2V0TGFzdEV2ZW50KCkKK1JlZjxFdmVudD4gRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6
Z2V0TGFzdEV2ZW50KCkKIHsKICAgICByZXR1cm4gRGV2aWNlUHJveGltaXR5RXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkud2Via2l0ZGV2aWNlcHJveGltaXR5RXZlbnQsIGRldmljZVByb3hpbWl0
eUNsaWVudCgpLT52YWx1ZSgpLCBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+bWluKCksIGRldmlj
ZVByb3hpbWl0eUNsaWVudCgpLT5tYXgoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3Byb3hpbWl0eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmgKaW5k
ZXggNDBkZGZiN2YyMTBjZmEwNDFkNWQ2ZmRkYTYwZDJmMGJhMjU1YWIwNi4uMDExNTc1NTdmYmIy
MzAxNjMwNGM5YTNkNmQwZWNhMjQ0ZmVlODc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuaApA
QCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgRGV2aWNlUHJveGltaXR5Q2xpZW50KiBkZXZp
Y2VQcm94aW1pdHlDbGllbnQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpOwot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCk7CisgICAgdmlydHVh
bCBSZWY8RXZlbnQ+IGdldExhc3RFdmVudCgpOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1
cHBsZW1lbnROYW1lKCk7CiAgICAgc3RhdGljIERldmljZVByb3hpbWl0eUNvbnRyb2xsZXIqIGZy
b20oUGFnZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0LmNwcAppbmRleCA2NDY1ODQwMDIwZWE2NTM5ZDgwZjRiNDNjMTdhNTQyZDhkM2I3MjcxLi40
MWViMTA5ZTdiZWJkOGJlZjFiOTZlODY0NTI2MjU1NjM5MjUxZGMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtNjQ4LDcgKzY0OCw3
IEBAIHZvaWQgV2ViU29ja2V0OjpkaXNwYXRjaE9yUXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZl
bnQpCiAgICAgaWYgKG1fc2hvdWxkRGVsYXlFdmVudEZpcmluZykKICAgICAgICAgbV9wZW5kaW5n
RXZlbnRzLmFwcGVuZChXVEY6Om1vdmUoZXZlbnQpKTsKICAgICBlbHNlCi0gICAgICAgIGRpc3Bh
dGNoRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQp
OwogfQogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0ZvbnRMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3Bw
CmluZGV4IGRkZTEzM2NjN2M3MDE0NGUyZDEwMzQ0ZmE3NzIzM2M5MWYwNjVmZDQuLjk1NTk5ZTM4
Y2FlYTcyZDg3OWI0MTg2YTJjOTRhNmY5YzFhN2JiNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRl
ci5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmZpcmVQZW5kaW5nRXZl
bnRzKCkKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcGVuZGlu
Z0V2ZW50cy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2
ZW50c1tpbmRleF0ucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqcGVuZGluZ0V2
ZW50c1tpbmRleF0pOwogCiAgICAgaWYgKGxvYWRpbmdEb25lICYmICFtX2NhbGxiYWNrcy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgVmVjdG9yPFJlZlB0cjxWb2lkQ2FsbGJhY2s+PiBjYWxsYmFja3M7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAKaW5kZXgg
MTE1MWJkMWViYTViZTRlOTY0OGU0ZjNhOWQwMjQ2MWRkYTM1ZGRiOC4uNGVhYjYyNGVmNmQ2YzY4
YTEzOGU0ZGUyOTY4NDVjODhiYWFiNTVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RldmljZU1vdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZp
Y2VNb3Rpb25Db250cm9sbGVyLmNwcApAQCAtNzIsNyArNzIsNyBAQCBib29sIERldmljZU1vdGlv
bkNvbnRyb2xsZXI6Omhhc0xhc3REYXRhKCkKICAgICByZXR1cm4gZGV2aWNlTW90aW9uQ2xpZW50
KCktPmxhc3RNb3Rpb24oKTsKIH0KIAotUGFzc1JlZlB0cjxFdmVudD4gRGV2aWNlTW90aW9uQ29u
dHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKK1JlZjxFdmVudD4gRGV2aWNlTW90aW9uQ29udHJvbGxl
cjo6Z2V0TGFzdEV2ZW50KCkKIHsKICAgICByZXR1cm4gRGV2aWNlTW90aW9uRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuZGV2aWNlbW90aW9uRXZlbnQsIGRldmljZU1vdGlvbkNsaWVudCgpLT5s
YXN0TW90aW9uKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1v
dGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9s
bGVyLmgKaW5kZXggN2Q3MmQ1MTVjYzZkODEzZGMxZjM4YzYxOWU4OWUyY2RjZmQ0YjlkYS4uNzJl
Zjg2YWYzOTMwYTYxZDRjNGIxNTA4ZDQ1OTIyODQ5ZjBiZjA2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoK
ICAgICBEZXZpY2VNb3Rpb25DbGllbnQqIGRldmljZU1vdGlvbkNsaWVudCgpOwogCiAgICAgdmly
dHVhbCBib29sIGhhc0xhc3REYXRhKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PEV2ZW50PiBnZXRMYXN0RXZlbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZjxFdmVudD4g
Z2V0TGFzdEV2ZW50KCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxl
bWVudE5hbWUoKTsKICAgICBzdGF0aWMgRGV2aWNlTW90aW9uQ29udHJvbGxlciogZnJvbShQYWdl
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xs
ZXIuY3BwCmluZGV4IGFjZTNiMmIyMjk2M2U4MTI2MzliOTA4MmNhYjg0NmQxMDE3Y2Q1MzYuLmVj
NGM0ODc5ZDc4ZWQyZTcyOGQ4NzE3OWU4M2E5YjM1MWJiNzNjOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC03OSw3ICs3
OSw3IEBAIGJvb2wgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpoYXNMYXN0RGF0YSgpCiAg
ICAgcmV0dXJuIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCktPmxhc3RPcmllbnRhdGlvbigpOwog
fQogCi1QYXNzUmVmUHRyPEV2ZW50PiBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI6OmdldExh
c3RFdmVudCgpCitSZWY8RXZlbnQ+IERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6Z2V0TGFz
dEV2ZW50KCkKIHsKICAgICByZXR1cm4gRGV2aWNlT3JpZW50YXRpb25FdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5kZXZpY2VvcmllbnRhdGlvbkV2ZW50LCBkZXZpY2VPcmllbnRhdGlvbkNsaWVu
dCgpLT5sYXN0T3JpZW50YXRpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgKaW5kZXggMTE4MzA2MzQ4NjllOTA2ZTU4NzczNzRi
YjczYTJmZGU0ZThiOTI4Ny4uZjNhZWJiMzE0YjJlYjBlNzg2YjUzMWYyZTQyYjhkNTY5Njk5MjUy
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJv
bGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xs
ZXIuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXN1bWVVcGRhdGVzKCk7
CiAjZWxzZQogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBSZWY8RXZlbnQ+IGdldExhc3RFdmVudCgpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICBz
dGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CmluZGV4IDhjMTBkMGU5NGMwMWI3MDc4YmQxMTIwYjY3NDQ1ZjY0NjY4YjVhOWMuLjkzZTY2ZTg0
MTNiOThjY2I3NGY5ZjM4ODJmNGQwNThjMWY0MDVmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtNDA1MCw3ICs0MDUwLDcgQEAgRXZlbnRMaXN0ZW5lciogRG9jdW1lbnQ6OmdldFdpbmRv
d0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmUKICAgICByZXR1
cm4gbV9kb21XaW5kb3ctPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKIH0K
IAotdm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCwgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRG9jdW1lbnQ6OmRp
c3BhdGNoV2luZG93RXZlbnQoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdldCogdGFyZ2V0KQogewog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3Nl
cnRpb246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKICAgICBpZiAoIW1fZG9tV2luZG93
KQpAQCAtNDA2OCwyMSArNDA2OCwyMSBAQCB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRvd0xv
YWRFdmVudCgpCiAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnREaWRGaW5pc2hM
b2FkRXZlbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVdpbmRvd0V2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVdpbmRvd0V2ZW50KFJl
ZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBldmVudC0+c2V0VGFyZ2V0KG1fZG9tV2luZG93Lmdl
dCgpKTsKLSAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KGV2ZW50KTsKKyAgICBtX2V2ZW50
UXVldWUuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVudCkpOwogfQogCi12b2lkIERvY3VtZW50
OjplbnF1ZXVlRG9jdW1lbnRFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgRG9j
dW1lbnQ6OmVucXVldWVEb2N1bWVudEV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBl
dmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZl
bnQpOworICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9
CiAKLXZvaWQgRG9jdW1lbnQ6OmVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZU92ZXJmbG93RXZlbnQoUmVmPEV2ZW50PiYm
IGV2ZW50KQogewotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQpOworICAgIG1f
ZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKIFJlZlB0cjxF
dmVudD4gRG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNl
cHRpb25Db2RlJiBlYykKQEAgLTU5ODAsMjQgKzU5ODAsMjQgQEAgdm9pZCBEb2N1bWVudDo6c2Vu
ZFdpbGxSZXZlYWxFZGdlRXZlbnRzSWZOZWVkZWQoY29uc3QgSW50UG9pbnQmIG9sZFBvc2l0aW9u
LCBjb24KICAgICAvLyBCb3R0b20gZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueSgpID49IHdp
bGxSZXZlYWxCb3R0b21Ob3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi55KCkgPiBvbGRQ
b3NpdGlvbi55KCkKICAgICAgICAgJiYgd2lsbFJldmVhbEJvdHRvbU5vdGlmaWNhdGlvblBvaW50
ID49IG9sZFBvc2l0aW9uLnkoKSkgewotICAgICAgICBSZWZQdHI8RXZlbnQ+IHdpbGxSZXZlYWxF
dmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWxib3R0b21F
dmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQg
PSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsYm90dG9tRXZlbnQs
IGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1
ZVdpbmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5x
dWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAg
ICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFz
ZSgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdp
bGxSZXZlYWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gVG9wIGVkZ2UuCiAg
ICAgaWYgKG5ld1Bvc2l0aW9uLnkoKSA8PSB3aWxsUmV2ZWFsVG9wTm90aWZpY2F0aW9uUG9pbnQg
JiYgbmV3UG9zaXRpb24ueSgpIDwgb2xkUG9zaXRpb24ueSgpCiAgICAgICAgICYmIHdpbGxSZXZl
YWxUb3BOb3RpZmljYXRpb25Qb2ludCA8PSBvbGRQb3NpdGlvbi55KCkpIHsKLSAgICAgICAgUmVm
UHRyPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53
ZWJraXR3aWxscmV2ZWFsdG9wRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIFJlZjxFdmVu
dD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0d2ls
bHJldmVhbHRvcEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICBpZiAoIXRhcmdldCkKLSAg
ICAgICAgICAgIGVucXVldWVXaW5kb3dFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsK
KyAgICAgICAgICAgIGVucXVldWVXaW5kb3dFdmVudChXVEY6Om1vdmUod2lsbFJldmVhbEV2ZW50
KSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgd2lsbFJldmVhbEV2ZW50LT5zZXRUYXJn
ZXQodGFyZ2V0KTsKLSAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQod2lsbFJl
dmVhbEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2
ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
NjAwNywyNCArNjAwNywyNCBAQCB2b2lkIERvY3VtZW50OjpzZW5kV2lsbFJldmVhbEVkZ2VFdmVu
dHNJZk5lZWRlZChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbgogICAgIC8vIFJpZ2h0
IGVkZ2UuCiAgICAgaWYgKG5ld1Bvc2l0aW9uLngoKSA+PSB3aWxsUmV2ZWFsUmlnaHROb3RpZmlj
YXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkgPiBvbGRQb3NpdGlvbi54KCkKICAgICAgICAg
JiYgd2lsbFJldmVhbFJpZ2h0Tm90aWZpY2F0aW9uUG9pbnQgPj0gb2xkUG9zaXRpb24ueCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZhbHNlLCBmYWxzZSk7Cisg
ICAgICAgIFJlZjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAg
IGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KHdpbGxSZXZlYWxF
dmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92
ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3aWxsUmV2
ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVu
cXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIG1fZXZl
bnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgLy8gTGVmdCBlZGdlLgogICAgIGlmIChuZXdQb3NpdGlvbi54KCkg
PD0gd2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkgPCBv
bGRQb3NpdGlvbi54KCkKICAgICAgICAgJiYgd2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Qb2lu
dCA8PSBvbGRQb3NpdGlvbi54KCkpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiB3aWxsUmV2ZWFs
RXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsbGVmdEV2
ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBSZWY8RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9
IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWxsZWZ0RXZlbnQsIGZh
bHNlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdp
bmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1
ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAg
ICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgp
KTsKKyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxS
ZXZlYWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
aW5kZXggOTc2Y2RhMWFkNzA1ZjhjZWIzODRiYmM3YWM0MGEyZmUwODAzNTViNi4uN2NhYjMxNmQ3
NTUwYzliNmU1YWNhMzhkY2MwZTNkOTVhNWI4YTRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAg
LTc4OCw3ICs3ODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaW5kb3dBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lk
IHNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwogICAgIEV2ZW50TGlzdGVuZXIqIGdl
dFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hXaW5kb3dFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gPSBudWxscHRyKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQmLCBFdmVudFRhcmdldCog
PSBudWxscHRyKTsKICAgICB2b2lkIGRpc3BhdGNoV2luZG93TG9hZEV2ZW50KCk7CiAKICAgICBS
ZWZQdHI8RXZlbnQ+IGNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNlcHRp
b25Db2RlJik7CkBAIC0xMDkyLDkgKzEwOTIsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGlzQ29udGV4dFRocmVhZCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgYm9v
bCBpc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4g
ZmFsc2U7IH0KIAotICAgIHZvaWQgZW5xdWV1ZVdpbmRvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KTsKLSAgICB2b2lkIGVucXVldWVEb2N1bWVudEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAg
ICB2b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lk
IGVucXVldWVXaW5kb3dFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZvaWQgZW5xdWV1ZURvY3Vt
ZW50RXZlbnQoUmVmPEV2ZW50PiYmKTsKKyAgICB2b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50KFJl
ZjxFdmVudD4mJik7CiAgICAgdm9pZCBlbnF1ZXVlUGFnZXNob3dFdmVudChQYWdlc2hvd0V2ZW50
UGVyc2lzdGVuY2UpOwogICAgIHZvaWQgZW5xdWV1ZUhhc2hjaGFuZ2VFdmVudChjb25zdCBTdHJp
bmcmIG9sZFVSTCwgY29uc3QgU3RyaW5nJiBuZXdVUkwpOwogICAgIHZvaWQgZW5xdWV1ZVBvcHN0
YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5jcHAKaW5kZXggYTdiYjVkZmUy
Y2FmODQ4ZDRmNWY5MmUyODFjOTczMmU0OGEyZTlmOS4uOGVhNWVjMDM3NGJkMTM3ODg3MWQyYTYy
ZDk0YTliOTc4MjBiYzZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
RXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1
ZS5jcHAKQEAgLTY4LDE1ICs2OCwxNSBAQCBEb2N1bWVudEV2ZW50UXVldWU6On5Eb2N1bWVudEV2
ZW50UXVldWUoKQogewogfQogCi1ib29sIERvY3VtZW50RXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBEb2N1bWVudEV2ZW50UXVldWU6OmVucXVl
dWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQo
KSk7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250YWlucyhldmVudC5nZXQoKSkpOwor
ICAgIEFTU0VSVCghbV9xdWV1ZWRFdmVudHMuY29udGFpbnMoZXZlbnQucHRyKCkpKTsKIAogICAg
IGlmIChtX2lzQ2xvc2VkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3F1ZXVlZEV2
ZW50cy5hZGQoZXZlbnQpOworICAgIG1fcXVldWVkRXZlbnRzLmFkZChldmVudC5wdHIoKSk7CiAg
ICAgaWYgKCFtX3BlbmRpbmdFdmVudFRpbWVyLT5pc0FjdGl2ZSgpKQogICAgICAgICBtX3BlbmRp
bmdFdmVudFRpbWVyLT5zdGFydE9uZVNob3QoMCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05OSw5
ICs5OSw5IEBAIHZvaWQgRG9jdW1lbnRFdmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9s
bEV2ZW50KE5vZGUmIHRhcmdldCkKICAgICBib29sIGJ1YmJsZXMgPSB0YXJnZXQuaXNEb2N1bWVu
dE5vZGUoKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBmYWxzZTsKIAotICAgIFJlZlB0cjxFdmVu
dD4gc2Nyb2xsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwg
YnViYmxlcywgY2FuY2VsYWJsZSk7CisgICAgUmVmPEV2ZW50PiBzY3JvbGxFdmVudCA9IEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBidWJibGVzLCBjYW5jZWxhYmxlKTsK
ICAgICBzY3JvbGxFdmVudC0+c2V0VGFyZ2V0KCZ0YXJnZXQpOwotICAgIGVucXVldWVFdmVudChz
Y3JvbGxFdmVudC5yZWxlYXNlKCkpOworICAgIGVucXVldWVFdmVudChXVEY6Om1vdmUoc2Nyb2xs
RXZlbnQpKTsKIH0KIAogYm9vbCBEb2N1bWVudEV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2ZW50
JiBldmVudCkKQEAgLTE0Niw5ICsxNDYsOSBAQCB2b2lkIERvY3VtZW50RXZlbnRRdWV1ZTo6ZGlz
cGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiAgICAgLy8gV2h5IGRvIHdlIGhhdmUgdGhpcyBzcGVj
aWFsIGNhc2UgaGVyZSBpbnN0ZWFkIG9mIGEgdmlydHVhbCBmdW5jdGlvbiBvbiBFdmVudFRhcmdl
dD8KICAgICBFdmVudFRhcmdldCYgZXZlbnRUYXJnZXQgPSAqZXZlbnQudGFyZ2V0KCk7CiAgICAg
aWYgKERPTVdpbmRvdyogd2luZG93ID0gZXZlbnRUYXJnZXQudG9ET01XaW5kb3coKSkKLSAgICAg
ICAgd2luZG93LT5kaXNwYXRjaEV2ZW50KCZldmVudCwgMCk7CisgICAgICAgIHdpbmRvdy0+ZGlz
cGF0Y2hFdmVudChldmVudCwgbnVsbHB0cik7CiAgICAgZWxzZQotICAgICAgICBldmVudFRhcmdl
dC5kaXNwYXRjaEV2ZW50KCZldmVudCk7CisgICAgICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoRXZl
bnQoZXZlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRFdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmgK
aW5kZXggOTgyNWVkMmY2MDdhNDJhODdiNTExMzNhOWI4MTVlNTVlZjIzMGVkYy4uN2QxMTFkMmQ0
YjViYTY5YzhiM2U3YzIyZjg3NDRjZTc5Njc1M2I5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudEV2ZW50UXVldWUuaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQg
RG9jdW1lbnRFdmVudFF1ZXVlKERvY3VtZW50Jik7CiAgICAgdmlydHVhbCB+RG9jdW1lbnRFdmVu
dFF1ZXVlKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4m
Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50Jikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCA5OGE2MTBmZWQxYzZhOTU0ZmExNDI3NGVmOWNhZTJjZjhhNzM5ODNjLi4zZDcz
ZGVhNjhmZjRkMzU4Y2MxMDhiZGJmY2JhNTM3NTM4NzUzM2ExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogICAgIGlmIChp
c0ZvcmNlRXZlbnQocGxhdGZvcm1FdmVudCkgJiYgIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBl
Rm9yRXZlbnRUeXBlKHBsYXRmb3JtRXZlbnQudHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVh
dGUoZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtRXZlbnQsIGRl
dGFpbCwgcmVsYXRlZFRhcmdldCk7CisgICAgUmVmPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBN
b3VzZUV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBs
YXRmb3JtRXZlbnQsIGRldGFpbCwgcmVsYXRlZFRhcmdldCk7CiAKICAgICBpZiAobW91c2VFdmVu
dC0+dHlwZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFNob3VsZG4ndCBo
YXBwZW4uCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZl
bnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogICAgICAg
ICAvLyBTcGVjaWFsIGNhc2U6IElmIGl0J3MgYSBkb3VibGUgY2xpY2sgZXZlbnQsIHdlIGFsc28g
c2VuZCB0aGUgZGJsY2xpY2sgZXZlbnQuIFRoaXMgaXMgbm90IHBhcnQKICAgICAgICAgLy8gb2Yg
dGhlIERPTSBzcGVjcywgYnV0IGlzIHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb25k
YmxjbGljaz0iIiBhdHRyaWJ1dGUuIFRoaXMgaXMgdHJlYXRlZAogICAgICAgICAvLyBhcyBhIHNl
cGFyYXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMgbGlrZSBGaXJlZm94
LCBhbmQgc28gd2UgZG8gdGhlIHNhbWUuCi0gICAgICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBkb3Vi
bGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxNb3VzZUV2
ZW50PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7CiAgICAgICAgIGRv
dWJsZUNsaWNrRXZlbnQtPmluaXRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50
LAogICAgICAgICAgICAgbW91c2VFdmVudC0+YnViYmxlcygpLCBtb3VzZUV2ZW50LT5jYW5jZWxh
YmxlKCksIG1vdXNlRXZlbnQtPnZpZXcoKSwgbW91c2VFdmVudC0+ZGV0YWlsKCksCiAgICAgICAg
ICAgICBtb3VzZUV2ZW50LT5zY3JlZW5YKCksIG1vdXNlRXZlbnQtPnNjcmVlblkoKSwgbW91c2VF
dmVudC0+Y2xpZW50WCgpLCBtb3VzZUV2ZW50LT5jbGllbnRZKCksCkBAIC0yODUsNyArMjg1LDcg
QEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxXaGVl
bEV2ZW50PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVudDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVudCgp
LmRlZmF1bHRWaWV3KCkpOworICAgIFJlZjxXaGVlbEV2ZW50PiB3aGVlbEV2ZW50ID0gV2hlZWxF
dmVudDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOwogCiAgICAgLy8g
RXZlbnRzIHdpdGggbm8gZGVsdGFzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSB0aGV5IGNvbnZleSBw
bGF0Zm9ybSBpbmZvcm1hdGlvbiBhYm91dCBzY3JvbGwgZ2VzdHVyZXMKICAgICAvLyBhbmQgbW9t
ZW50dW0gYmVnaW5uaW5nIG9yIGVuZGluZy4gSG93ZXZlciwgdGhvc2UgZXZlbnRzIHNob3VsZCBu
b3QgYmUgc2VudCB0byB0aGUgRE9NIHNpbmNlIHNvbWUKQEAgLTMwMCw5ICszMDAsOSBAQCBib29s
IEVsZW1lbnQ6OmRpc3BhdGNoV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2
ZW50KQogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXli
b2FyZEV2ZW50JiBwbGF0Zm9ybUV2ZW50KQogewotICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBl
dmVudCA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgpLmRl
ZmF1bHRWaWV3KCkpOworICAgIFJlZjxLZXlib2FyZEV2ZW50PiBldmVudCA9IEtleWJvYXJkRXZl
bnQ6OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOwogICAg
IGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGZy
YW1lLT5ldmVudEhhbmRsZXIoKS5hY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9u
KGV2ZW50LmdldCgpKSkKKyAgICAgICAgaWYgKGZyYW1lLT5ldmVudEhhbmRsZXIoKS5hY2Nlc3Np
YmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKGV2ZW50KSkKICAgICAgICAgICAgIGV2ZW50
LT5zdG9wUHJvcGFnYXRpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVudCkgJiYgIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwpA
QCAtMjMyNCw3ICsyMzI0LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VXaWxs
QmVnaW4oKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQg
cGxhdGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBv
c2l0aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0
aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5cGUsIDEsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZvcmNlQXRDbGljayk7Ci0gICAgUmVm
UHRyPE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCA9ICBNb3VzZUV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2V3aWxsYmVnaW5FdmVudCwgZG9jdW1l
bnQoKS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNlRXZlbnQsIDAsIG51bGxwdHIpOworICAg
IFJlZjxNb3VzZUV2ZW50PiBtb3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQgPSAgTW91c2VFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNld2lsbGJlZ2luRXZlbnQsIGRvY3Vt
ZW50KCkuZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm1Nb3VzZUV2ZW50LCAwLCBudWxscHRyKTsKICAg
ICBtb3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKICAgICBkaXNwYXRj
aEV2ZW50KG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCmluZGV4
IDU5NmRkODU4YTA0YzM2M2E3NWU0OGVhY2Y4YTc0YTVhOGQ2ZWU4NTUuLjVjMWU2ZmU3MDEyNzhj
ZGU1YWU2ZTAzZWQ4NWE1ZTI3NGQ3OWEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcApAQCAtMTYyLDEy
ICsxNjIsMTIgQEAgUGFzc1JlZlB0cjxFdmVudD4gRXZlbnQ6OmNsb25lRm9yKEhUTUxJRnJhbWVF
bGVtZW50KikgY29uc3QKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZSh0eXBlKCksIGJ1YmJsZXMo
KSwgY2FuY2VsYWJsZSgpKTsKIH0KIAotdm9pZCBFdmVudDo6c2V0VGFyZ2V0KFBhc3NSZWZQdHI8
RXZlbnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRXZlbnQ6OnNldFRhcmdldChSZWZQdHI8RXZlbnRU
YXJnZXQ+JiYgdGFyZ2V0KQogewogICAgIGlmIChtX3RhcmdldCA9PSB0YXJnZXQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OworICAgIG1fdGFyZ2V0ID0gV1RGOjpt
b3ZlKHRhcmdldCk7CiAgICAgaWYgKG1fdGFyZ2V0KQogICAgICAgICByZWNlaXZlZFRhcmdldCgp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnQuaAppbmRleCAwOWU3NzhkNTEzNmZmMGZjYTg2ZTRkYzI5ZmViYWFlODlj
MjE3ZjBjLi4wY2NjZTEwODg1Mzg4NTJlMzFkNGYzNDIxNmNlY2QxOGU4OTQyMzNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnQuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFR5cGUoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KICAgICAKICAgICBFdmVu
dFRhcmdldCogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KLSAgICB2
b2lkIHNldFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CisgICAgdm9pZCBzZXRUYXJn
ZXQoUmVmUHRyPEV2ZW50VGFyZ2V0PiYmKTsKIAogICAgIEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0OyB9CiAgICAgdm9pZCBzZXRDdXJy
ZW50VGFyZ2V0KEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0KSB7IG1fY3VycmVudFRhcmdldCA9
IGN1cnJlbnRUYXJnZXQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5k
ZXggMmJkYzM1MGI1YTVmNzYzMzBiMmQ3ZGI3NjgyYjc2Zjg4NjUzYWEyZC4uMzQxODQ3ZmQzODAy
ODhmMzAwZTBkODNiNmIwNDNkYWJlNTIxNzQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlz
cGF0Y2hlci5jcHAKQEAgLTcwLDkgKzcwLDkgQEAgYm9vbCBXaW5kb3dFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoIW1fd2luZG93KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBldmVudC5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwor
ICAgIGV2ZW50LnNldFRhcmdldChtX3RhcmdldC5jb3B5UmVmKCkpOwogICAgIGV2ZW50LnNldEN1
cnJlbnRUYXJnZXQobV93aW5kb3cuZ2V0KCkpOwotICAgIG1fd2luZG93LT5maXJlRXZlbnRMaXN0
ZW5lcnMoJmV2ZW50KTsKKyAgICBtX3dpbmRvdy0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjAxLDEwICsyMDEsMTAgQEAgaW5saW5lIEV2ZW50
VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhOb2RlJiByZWZlcmVuY2VO
b2RlKQogICAgIHJldHVybiAmcmVmZXJlbmNlTm9kZTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQoTm9kZSYgbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiBub2Rl
LCBFdmVudCYgZXZlbnQpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHRhcmdldCBoZXJl
IGJlY2F1c2UgaXQgY2FuIGdvIGF3YXkgYnkgdGhlIHRpbWUgd2UgYWN0dWFsbHkgZmlyZSB0aGUg
ZXZlbnQuCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRS
dWxlcyhub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rh
cmdldFJ1bGVzKG5vZGUpKTsKICAgICBTY29wZWRFdmVudFF1ZXVlOjpzaW5nbGV0b24oKS5lbnF1
ZXVlRXZlbnQoZXZlbnQpOwogfQogCkBAIC0zMDAsMjMgKzMwMCwxOSBAQCBzdGF0aWMgdm9pZCBk
aXNwYXRjaEV2ZW50SW5ET00oRXZlbnQmIGV2ZW50LCBjb25zdCBFdmVudFBhdGgmIHBhdGgsIFdp
bmRvd0V2ZW50QwogICAgIH0KIH0KIAotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZl
bnQoTm9kZSogb3JpZ2luLCBQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jvb2wgRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG9yaWdpbiwgRXZlbnQmIGV2ZW50KQogewog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3Nl
cnRpb246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBpZiAoIXBycEV2ZW50KQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIEFTU0VSVChvcmlnaW4pOwogICAgIFJlZlB0cjxO
b2RlPiBub2RlKG9yaWdpbik7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudChwcnBFdmVudCk7CiAg
ICAgUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IG5vZGUtPmRvY3VtZW50KCkudmlldygpOwotICAg
IEV2ZW50UGF0aCBldmVudFBhdGgoKm5vZGUsICpldmVudCk7CisgICAgRXZlbnRQYXRoIGV2ZW50
UGF0aCgqbm9kZSwgZXZlbnQpOwogCi0gICAgaWYgKEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0
ID0gZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKKyAgICBpZiAoRXZlbnRUYXJnZXQqIHJlbGF0ZWRU
YXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0KCkpCiAgICAgICAgIGV2ZW50UGF0aC5zZXRSZWxh
dGVkVGFyZ2V0KCpub2RlLCAqcmVsYXRlZFRhcmdldCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykgJiYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoaXM8VG91Y2hFdmVudD4oKmV2ZW50KSkgewot
ICAgICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRvd25jYXN0PFRvdWNoRXZl
bnQ+KCpldmVudCkpKQorICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkpIHsKKyAgICAgICAg
aWYgKCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cyhkb3duY2FzdDxUb3VjaEV2ZW50PihldmVu
dCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCkBAIC0zMjQsOCAr
MzIwLDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogb3JpZ2lu
LCBQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBDaGlsZE5vZGVzTGF6eVNuYXBzaG90
Ojp0YWtlQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCgpOwogCiAgICAgRXZlbnRUYXJnZXQqIHRhcmdl
dCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKTsKLSAgICBldmVudC0+
c2V0VGFyZ2V0KHRhcmdldCk7Ci0gICAgaWYgKCFldmVudC0+dGFyZ2V0KCkpCisgICAgZXZlbnQu
c2V0VGFyZ2V0KHRhcmdldCk7CisgICAgaWYgKCFldmVudC50YXJnZXQoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CkBAIC0zMzQs
MzAgKzMzMCwzMCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBv
cmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogCiAgICAgSW5wdXRFbGVtZW50Q2xp
Y2tTdGF0ZSBjbGlja0hhbmRsaW5nU3RhdGU7CiAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKSkKLSAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxE
aXNwYXRjaEV2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAgZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxEaXNwYXRjaEV2ZW50KGV2ZW50LCBjbGlj
a0hhbmRsaW5nU3RhdGUpOwogCi0gICAgaWYgKCFldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkg
JiYgIWV2ZW50UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTSgqZXZl
bnQsIGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsKKyAgICBpZiAoIWV2ZW50LnByb3Bh
Z2F0aW9uU3RvcHBlZCgpICYmICFldmVudFBhdGguaXNFbXB0eSgpKQorICAgICAgICBkaXNwYXRj
aEV2ZW50SW5ET00oZXZlbnQsIGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsKIAotICAg
IGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUp
KTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKLSAgICBldmVudC0+c2V0
RXZlbnRQaGFzZSgwKTsKKyAgICBldmVudC5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5n
VGFyZ2V0UnVsZXMoKm5vZGUpKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIp
OworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoMCk7CiAKICAgICBpZiAoY2xpY2tIYW5kbGluZ1N0
YXRlLnN0YXRlZnVsKQotICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSku
ZGlkRGlzcGF0Y2hDbGlja0V2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAg
ICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLmRpZERpc3BhdGNoQ2xpY2tFdmVu
dChldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAgIC8vIENhbGwgZGVmYXVsdCBldmVu
dCBoYW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHByZXZlbnRp
bmcKICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhhbmRsZXJz
IGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwg
YW5kIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdFByZXZlbnRl
ZCgpICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgY2FsbERlZmF1bHRFdmVu
dEhhbmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKCpldmVudCwgZXZlbnRQYXRoKTsKKyAgICBpZiAo
IWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZlbnQuZGVmYXVsdEhhbmRsZWQoKSkKKyAg
ICAgICAgY2FsbERlZmF1bHRFdmVudEhhbmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKGV2ZW50LCBl
dmVudFBhdGgpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gsIHRo
ZSBldmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCiAgICAgLy8gb3V0ZXJtb3N0IHNoYWRvdyBE
T00gYm91bmRhcnkuCi0gICAgZXZlbnQtPnNldFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFy
Z2V0KCkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOworICAgIGV2ZW50
LnNldFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFyZ2V0KCkpOworICAgIGV2ZW50LnNldEN1
cnJlbnRUYXJnZXQobnVsbHB0cik7CiAKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVu
dGVkKCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzaG91bGRFdmVudENyb3NzU2hhZG93Qm91bmRhcnkoRXZlbnQmIGV2ZW50
LCBTaGFkb3dSb290JiBzaGFkb3dSb290LCBFdmVudFRhcmdldCYgdGFyZ2V0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDY0MDQwZGQzY2M0YmU4N2JlYjYxOGMyMDljZjQ5
ZjIyYzQwNjU0ZDIuLmYxODlkN2E0ZGYyYjg1ZDI3YWY3NDVjZmFlM2FhZTQ2ODBkYTkzNTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTM4LDExICszOCwxMSBAQCBjbGFz
cyBOb2RlOwogCiBuYW1lc3BhY2UgRXZlbnREaXNwYXRjaGVyIHsKIAotYm9vbCBkaXNwYXRjaEV2
ZW50KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50Pik7Ci12b2lkIGRpc3BhdGNoU2NvcGVkRXZlbnQo
Tm9kZSYsIFBhc3NSZWZQdHI8RXZlbnQ+KTsKK2Jvb2wgZGlzcGF0Y2hFdmVudChOb2RlKiwgRXZl
bnQmKTsKK3ZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiwgRXZlbnQmKTsKIHZvaWQgZGlz
cGF0Y2hTaW11bGF0ZWRDbGljayhFbGVtZW50KiwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCwgU2lt
dWxhdGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucywgU2ltdWxhdGVkQ2xpY2tWaXN1YWxPcHRpb25z
KTsKIAotfTsKK30KIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRR
dWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaAppbmRleCBlOTkzNGM1MDhj
MmYxNjQ5ZDU0YjgwYjY1OGZmNmRjYmI0MTdlMWY3Li5hYzM5ZWM2MTdhZjhlZDQ2MmE1MWNkZWU3
YTE1ZDFmNDg4Mjg0YjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKQEAgLTM2LDcgKzM2LDcg
QEAgY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudFF1ZXVlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5FdmVudFF1ZXVlKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChQYXNzUmVm
UHRyPEV2ZW50PikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50
PiYmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50JikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsgLy8gRGlzY2FyZCBhY2N1bXVsYXRlZCBldmVudHMg
YW5kIGFsbCBmdXR1cmUgZXZlbnRzLiBObyBldmVudHMgd2lsbCBiZSBkaXNwYXRjaGVkIGFmdGVy
IHRoaXMuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXggNzYyYTZhNTI4ZjM1
MTM0MzNjZGJkY2Y5NDBhNmU2Mjk3OTczNjI1Yi4uYWI1MTU5MjJhYjRiNzAwYmYxZTZlYjM4Mjk2
NzM3NDdhYTg2ZGUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCkBAIC0xMzQsNyAr
MTM0LDcgQEAgYm9vbCBFdmVudFRhcmdldDo6Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogICAgIHJldHVybiByZW1vdmVFdmVudExpc3Rl
bmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTsKIH0KIAotYm9vbCBFdmVudFRhcmdldDo6
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
Citib29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KEV2ZW50KiBldmVudCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CiAgICAgaWYgKCFldmVudCkgewogICAgICAgICBlYyA9IFR5cGVFcnJvcjsK
QEAgLTE0OSwxNiArMTQ5LDE2IEBAIGJvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmICghc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsK
IH0KIAotYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK2Jvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewot
ICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQo
dGhpcyk7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7Ci0gICAg
Ym9vbCBkZWZhdWx0UHJldmVudGVkID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LmdldCgpKTsK
LSAgICBldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKKyAgICBldmVudC5zZXRUYXJnZXQodGhpcyk7
CisgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICBldmVudC5zZXRFdmVudFBo
YXNlKEV2ZW50OjpBVF9UQVJHRVQpOworICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZpcmVF
dmVudExpc3RlbmVycyhldmVudCk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsKICAgICBy
ZXR1cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KIApAQCAtMTY2LDMwICsxNjYsMzAgQEAgdm9pZCBF
dmVudFRhcmdldDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCiB7CiB9CiAKLXN0
YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGxlZ2FjeVR5cGUoY29uc3QgRXZlbnQqIGV2ZW50KQor
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbGVnYWN5VHlwZShjb25zdCBFdmVudCYgZXZlbnQp
CiB7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2
ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2
ZW50KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50
OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0
RXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uc3Rh
cnRFdmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFy
dEV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlv
bml0ZXJhdGlvbkV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFu
aW1hdGlvbml0ZXJhdGlvbkV2ZW50KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtp
dEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQpCiAgICAgICAgIHJldHVybiBldmVudE5hbWVz
KCkud2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLndoZWVsRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5h
bWVzKCkud2hlZWxFdmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVs
RXZlbnQ7CiAKICAgICByZXR1cm4gZW1wdHlBdG9tOwogfQogCi1ib29sIEV2ZW50VGFyZ2V0Ojpm
aXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQqIGV2ZW50KQorYm9vbCBFdmVudFRhcmdldDo6ZmlyZUV2
ZW50TGlzdGVuZXJzKEV2ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3Ji
aWRkZW4oKSk7Ci0gICAgQVNTRVJUKGV2ZW50ICYmIGV2ZW50LT5pc0luaXRpYWxpemVkKCkpOwor
ICAgIEFTU0VSVChldmVudC5pc0luaXRpYWxpemVkKCkpOwogCiAgICAgRXZlbnRUYXJnZXREYXRh
KiBkID0gZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgaWYgKCFkKQpAQCAtMjAwLDIxICsyMDAsMjEg
QEAgYm9vbCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCkKICAg
ICBpZiAoIWxlZ2FjeVR5cGVOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgbGVnYWN5TGlzdGVuZXJz
VmVjdG9yID0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5maW5kKGxlZ2FjeVR5cGVOYW1lKTsKIAotICAg
IEV2ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJN
YXAuZmluZChldmVudC0+dHlwZSgpKTsKKyAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5l
cnNWZWN0b3IgPSBkLT5ldmVudExpc3RlbmVyTWFwLmZpbmQoZXZlbnQudHlwZSgpKTsKIAogICAg
IGlmIChsaXN0ZW5lcnNWZWN0b3IpCiAgICAgICAgIGZpcmVFdmVudExpc3RlbmVycyhldmVudCwg
ZCwgKmxpc3RlbmVyc1ZlY3Rvcik7CiAgICAgZWxzZSBpZiAobGVnYWN5TGlzdGVuZXJzVmVjdG9y
KSB7Ci0gICAgICAgIEF0b21pY1N0cmluZyB0eXBlTmFtZSA9IGV2ZW50LT50eXBlKCk7Ci0gICAg
ICAgIGV2ZW50LT5zZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKKyAgICAgICAgQXRvbWljU3RyaW5n
IHR5cGVOYW1lID0gZXZlbnQudHlwZSgpOworICAgICAgICBldmVudC5zZXRUeXBlKGxlZ2FjeVR5
cGVOYW1lKTsKICAgICAgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBkLCAqbGVnYWN5TGlz
dGVuZXJzVmVjdG9yKTsKLSAgICAgICAgZXZlbnQtPnNldFR5cGUodHlwZU5hbWUpOworICAgICAg
ICBldmVudC5zZXRUeXBlKHR5cGVOYW1lKTsKICAgICB9CiAKLSAgICByZXR1cm4gIWV2ZW50LT5k
ZWZhdWx0UHJldmVudGVkKCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7
CiB9CiAgICAgICAgIAotdm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50
KiBldmVudCwgRXZlbnRUYXJnZXREYXRhKiBkLCBFdmVudExpc3RlbmVyVmVjdG9yJiBlbnRyeSkK
K3ZvaWQgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQsIEV2ZW50
VGFyZ2V0RGF0YSogZCwgRXZlbnRMaXN0ZW5lclZlY3RvciYgZW50cnkpCiB7CiAgICAgUmVmPEV2
ZW50VGFyZ2V0PiBwcm90ZWN0KCp0aGlzKTsKIApAQCAtMjI2LDMyICsyMjYsMzIgQEAgdm9pZCBF
dmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCwgRXZlbnRUYXJnZXRE
YXRhKiBkLCBFdmVudExpc3QKICAgICBzaXplX3Qgc2l6ZSA9IGVudHJ5LnNpemUoKTsKICAgICBp
ZiAoIWQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKQogICAgICAgICBkLT5maXJpbmdFdmVudEl0ZXJh
dG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8RmlyaW5nRXZlbnRJdGVyYXRvclZlY3Rvcj4oKTsKLSAg
ICBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXBwZW5kKEZpcmluZ0V2ZW50SXRlcmF0b3IoZXZl
bnQtPnR5cGUoKSwgaSwgc2l6ZSkpOworICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5hcHBl
bmQoRmlyaW5nRXZlbnRJdGVyYXRvcihldmVudC50eXBlKCksIGksIHNpemUpKTsKIAogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbnVsbHB0cjsKICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRDb29raWU7CiAgICAgaWYgKGlzPERvY3Vt
ZW50Pihjb250ZXh0KSkgewogICAgICAgICBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihj
b250ZXh0KTsKLSAgICAgICAgd2lsbERpc3BhdGNoRXZlbnRDb29raWUgPSBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KCpkb2N1bWVudCwgKmV2ZW50LCBzaXplID4g
MCk7CisgICAgICAgIHdpbGxEaXNwYXRjaEV2ZW50Q29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudCgqZG9jdW1lbnQsIGV2ZW50LCBzaXplID4gMCk7CiAg
ICAgfQogCiAgICAgZm9yICg7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRMaXN0ZW5lciA9IGVudHJ5W2ldOwotICAgICAgICBpZiAo
ZXZlbnQtPmV2ZW50UGhhc2UoKSA9PSBFdmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmICFyZWdpc3Rl
cmVkTGlzdGVuZXIudXNlQ2FwdHVyZSkKKyAgICAgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UoKSA9
PSBFdmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmICFyZWdpc3RlcmVkTGlzdGVuZXIudXNlQ2FwdHVy
ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZXZlbnQtPmV2ZW50UGhhc2Uo
KSA9PSBFdmVudDo6QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1
cmUpCisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJVQkJMSU5HX1BI
QVNFICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgLy8gSWYgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIGhhcyBiZWVuIGNh
bGxlZCwgd2UganVzdCBicmVhayBvdXQgaW1tZWRpYXRlbHksIHdpdGhvdXQKICAgICAgICAgLy8g
aGFuZGxpbmcgYW55IG1vcmUgZXZlbnRzIG9uIHRoaXMgdGFyZ2V0LgotICAgICAgICBpZiAoZXZl
bnQtPmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBpZiAoZXZlbnQuaW1t
ZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsSGFuZGxlRXZlbnQoY29udGV4dCwgKmV2ZW50KTsKKyAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbEhhbmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKICAgICAgICAgLy8gVG8gbWF0
Y2ggTW96aWxsYSwgdGhlIEFUX1RBUkdFVCBwaGFzZSBmaXJlcyBib3RoIGNhcHR1cmluZyBhbmQg
YnViYmxpbmcKICAgICAgICAgLy8gZXZlbnQgbGlzdGVuZXJzLCBldmVuIHRob3VnaCB0aGF0IHZp
b2xhdGVzIHNvbWUgdmVyc2lvbnMgb2YgdGhlIERPTSBzcGVjLgotICAgICAgICByZWdpc3RlcmVk
TGlzdGVuZXIubGlzdGVuZXItPmhhbmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKKyAgICAgICAg
cmVnaXN0ZXJlZExpc3RlbmVyLmxpc3RlbmVyLT5oYW5kbGVFdmVudChjb250ZXh0LCAmZXZlbnQp
OwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KGNvb2tp
ZSk7CiAgICAgfQogICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5yZW1vdmVMYXN0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5oCmluZGV4IDY4OGU2ZmY3MGI5MmNiNjg5M2JjOTlkZTc5MGYw
Njg5ZDdhNzkyZWYuLjcwNzc3NzQxYTdjNGZhMjcxZjAzZWFjMjNlYzc0NmZiOWM1NmEzY2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCkBAIC0xMjMsOCArMTIzLDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICB2aXJ0
dWFsIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIHJl
bW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pOwotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiwgRXhjZXB0aW9uQ29kZSYpOyAvLyBET00gQVBJCisgICAgdmlydHVhbCBib29sIGRpc3Bh
dGNoRXZlbnQoRXZlbnQmKTsKKyAgICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQqLCBFeGNlcHRp
b25Db2RlJik7IC8vIERPTSBBUEkKICAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRpb25J
bkV2ZW50SGFuZGxlcigpOwogCiAgICAgLy8gVXNlZCBmb3IgbGVnYWN5ICJvbkV2ZW50IiBhdHRy
aWJ1dGUgQVBJcy4KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNDYXB0
dXJpbmdFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAgICAg
Y29uc3QgRXZlbnRMaXN0ZW5lclZlY3RvciYgZ2V0RXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUpOwogCi0gICAgYm9vbCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQq
KTsKKyAgICBib29sIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYpOwogICAgIGJvb2wgaXNGaXJp
bmdFdmVudExpc3RlbmVycygpOwogCiAgICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlND
OjpTbG90VmlzaXRvciYpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50
VGFyZ2V0KCkgPSAwOwogICAgIAotICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50Kiwg
RXZlbnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYpOworICAgIHZvaWQgZmlyZUV2
ZW50TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3Rv
ciYpOwogCiAgICAgZnJpZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0dlbmVyaWNFdmVudFF1ZXVlLmNwcAppbmRleCA3MmRkMGZlZWQwMmFlMmRj
N2M5ZjNmZDZjZDdjZGE5OTMxNmMzOTJhLi5kYmE4NTI3MGRiNDc5NGY2ZmFiMjNhMjZiMzlmMWNi
NTk0YjFkZDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVl
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9HZW5lcmljRXZlbnRRdWV1ZS5jcHAKQEAg
LTEwMCw3ICsxMDAsNyBAQCB2b2lkIEdlbmVyaWNFdmVudFF1ZXVlOjpkaXNwYXRjaE9uZUV2ZW50
KCkKICAgICBSZWY8RXZlbnRUYXJnZXQ+IHByb3RlY3QobV9vd25lcik7CiAgICAgUmVmUHRyPEV2
ZW50PiBldmVudCA9IG1fcGVuZGluZ0V2ZW50cy50YWtlRmlyc3QoKTsKICAgICBFdmVudFRhcmdl
dCYgdGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpID8gKmV2ZW50LT50YXJnZXQoKSA6IG1fb3duZXI7
Ci0gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKKyAgICB0YXJnZXQu
ZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogfQogCiB2b2lkIEdlbmVyaWNFdmVudFF1ZXVlOjpjbG9z
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCBjMzI1Njg0NGY0ODQ1OGU5YmM3
NDdjYzBlOWQ5ZDM3NTA3OGQ4ZWIwLi5hM2FiODk2YmY1M2NmOGEwN2RlNWU5MmZlOTY3NzQ5M2E2
Zjk0M2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTE2MCw5ICsxNjAsOCBA
QCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPSBN
ZXNzYWdlUG9ydDo6ZW50YW5nbGVQb3J0cygqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXVEY6
Om1vdmUoY2hhbm5lbHMpKTsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZl
bnQ6OmNyZWF0ZShXVEY6Om1vdmUocG9ydHMpLCBtZXNzYWdlLnJlbGVhc2UoKSk7Ci0KLSAgICAg
ICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAg
ICAgICAgUmVmPEV2ZW50PiBldmVudCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFdURjo6bW92ZShw
b3J0cyksIG1lc3NhZ2UucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMzg3Y2FlYjBmNTNiYzEyYjg0OTYzMDBm
OWI4MzhlN2JhOWJiMjk3NC4uNzI4ZDBhMjE5Y2U5OTMyYWFkNGRiMzhjMjYxM2ViM2MwM2M4ODQz
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjA5MCwxOSArMjA5MCwxOSBAQCB2b2lkIE5vZGU6Omhh
bmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMp
ICYmIGRvd25jYXN0PEVsZW1lbnQ+KCp0aGlzKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiBl
dmVudC5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlyZUV2ZW50TGlz
dGVuZXJzKCZldmVudCk7CisgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIH0KIAotdm9p
ZCBOb2RlOjpkaXNwYXRjaFNjb3BlZEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9p
ZCBOb2RlOjpkaXNwYXRjaFNjb3BlZEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQoKnRoaXMsIGV2ZW50KTsKIH0KIAotYm9vbCBO
b2RlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBOb2RlOjpk
aXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAm
JiAhUExBVEZPUk0oSU9TKQotICAgIGlmIChpczxUb3VjaEV2ZW50PigqZXZlbnQpKQotICAgICAg
ICByZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFkb3B0UmVmKGRvd25jYXN0PFRvdWNoRXZlbnQ+
KGV2ZW50LmxlYWtSZWYoKSkpKTsKKyAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpKQorICAg
ICAgICByZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50
KSk7CiAjZW5kaWYKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRo
aXMsIGV2ZW50KTsKIH0KQEAgLTIxMjYsNyArMjEyNiw3IEBAIHZvaWQgTm9kZTo6ZGlzcGF0Y2hT
dWJ0cmVlTW9kaWZpZWRFdmVudCgpCiBib29sIE5vZGU6OmRpc3BhdGNoRE9NQWN0aXZhdGVFdmVu
dChpbnQgZGV0YWlsLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQpCiB7CiAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlv
bjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIFJlZlB0cjxVSUV2ZW50PiBldmVu
dCA9IFVJRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCwgdHJ1ZSwg
dHJ1ZSwgZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBkZXRhaWwpOworICAgIFJlZjxVSUV2ZW50
PiBldmVudCA9IFVJRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCwg
dHJ1ZSwgdHJ1ZSwgZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBkZXRhaWwpOwogICAgIGV2ZW50
LT5zZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50KTsKICAgICBkaXNwYXRjaFNjb3Bl
ZEV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7CkBAIC0y
MTQwLDEwICsyMTQwLDEwIEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hUb3VjaEV2ZW50KFBhc3NSZWZQ
dHI8VG91Y2hFdmVudD4gZXZlbnQpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTkRJRV9VSSkKLWJv
b2wgTm9kZTo6ZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChQYXNzUmVmUHRyPFVJUmVxdWVzdEV2ZW50
PiBldmVudCkKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChVSVJlcXVlc3RFdmVu
dCYgZXZlbnQpCiB7CiAgICAgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMsIGV2
ZW50KTsKLSAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkgfHwgZXZlbnQtPmRlZmF1
bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gZXZlbnQuZGVmYXVsdEhhbmRsZWQoKSB8fCBldmVu
dC5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAjZW5kaWYKICAgICAKQEAgLTIxNTMsOCArMjE1Myw4
IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgUmVmPE5vZGU+IHByb3RlY3QoKnRo
aXMpOwotICAgIFJlZlB0cjxCZWZvcmVMb2FkRXZlbnQ+IGJlZm9yZUxvYWRFdmVudCA9IEJlZm9y
ZUxvYWRFdmVudDo6Y3JlYXRlKHNvdXJjZVVSTCk7Ci0gICAgZGlzcGF0Y2hFdmVudChiZWZvcmVM
b2FkRXZlbnQuZ2V0KCkpOworICAgIFJlZjxCZWZvcmVMb2FkRXZlbnQ+IGJlZm9yZUxvYWRFdmVu
dCA9IEJlZm9yZUxvYWRFdmVudDo6Y3JlYXRlKHNvdXJjZVVSTCk7CisgICAgZGlzcGF0Y2hFdmVu
dChiZWZvcmVMb2FkRXZlbnQpOwogICAgIHJldHVybiAhYmVmb3JlTG9hZEV2ZW50LT5kZWZhdWx0
UHJldmVudGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGVmZjA4NmE1YmVlMmUwYmY4NWI3N2Fj
ODdlYmMyMWE1MDc1M2FiZDcuLjM3OWE4NjZhYjEwMmIyNTI2YjUxZTBjMDYxM2MyZjBhN2Y3NGEw
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaApAQCAtNTE5LDkgKzUxOSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
RXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSkgb3ZlcnJpZGU7CiAKICAgICB1c2luZyBF
dmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChQ
YXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBkaXNwYXRjaFNjb3BlZEV2ZW50KEV2ZW50Jik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmKTsKIApAQCAtNTM2
LDcgKzUzNiw3IEBAIHB1YmxpYzoKICAgICBib29sIGRpc3BhdGNoVG91Y2hFdmVudChQYXNzUmVm
UHRyPFRvdWNoRXZlbnQ+KTsKICNlbmRpZgogI2lmIEVOQUJMRShJTkRJRV9VSSkKLSAgICBib29s
IGRpc3BhdGNoVUlSZXF1ZXN0RXZlbnQoUGFzc1JlZlB0cjxVSVJlcXVlc3RFdmVudD4pOworICAg
IGJvb2wgZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChVSVJlcXVlc3RFdmVudCYpOwogI2VuZGlmCiAK
ICAgICBib29sIGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJM
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcAppbmRleCAyMGYxOGNkNGMy
Y2I4NzJlNjc2ZGM3MTUzNjc1ZjVlOWViODQ2ZjM5Li45MzUwMTMyMzQ4NGEzNTQ0MzhmNDFkYTFi
Mzk3MDAzYWE5ZDk3YTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZl
bnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuY3Bw
CkBAIC00MywyNyArNDMsMjcgQEAgU2NvcGVkRXZlbnRRdWV1ZSYgU2NvcGVkRXZlbnRRdWV1ZTo6
c2luZ2xldG9uKCkKICAgICByZXR1cm4gc2NvcGVkRXZlbnRRdWV1ZTsKIH0KIAotdm9pZCBTY29w
ZWRFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lk
IFNjb3BlZEV2ZW50UXVldWU6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAg
ICAgaWYgKG1fc2NvcGluZ0xldmVsKQotICAgICAgICBtX3F1ZXVlZEV2ZW50cy5hcHBlbmQoZXZl
bnQpOworICAgICAgICBtX3F1ZXVlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2ZW50KSk7CiAg
ICAgZWxzZQogICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAotdm9pZCBTY29wZWRF
dmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KSBjb25zdAor
dm9pZCBTY29wZWRFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsKKyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0
KCkpOwogICAgIC8vIFN0b3JlIHRoZSB0YXJnZXQgaW4gYSBsb2NhbCB2YXJpYWJsZSB0byBhdm9p
ZCBwb3NzaWJseSBkZXJlZmVyZW5jaW5nIGEgbnVsbGlmaWVkIFBhc3NSZWZQdHIgYWZ0ZXIgaXQn
cyBwYXNzZWQgb24uCi0gICAgTm9kZSogbm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7
CisgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldCgpLT50b05vZGUoKTsKICAgICBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQobm9kZSwgZXZlbnQpOwogfQogCiB2b2lkIFNjb3BlZEV2
ZW50UXVldWU6OmRpc3BhdGNoQWxsRXZlbnRzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50
Pj4gcXVldWVkRXZlbnRzID0gV1RGOjptb3ZlKG1fcXVldWVkRXZlbnRzKTsKKyAgICBWZWN0b3I8
UmVmPEV2ZW50Pj4gcXVldWVkRXZlbnRzID0gV1RGOjptb3ZlKG1fcXVldWVkRXZlbnRzKTsKICAg
ICBmb3IgKGF1dG8mIHF1ZXVlZEV2ZW50IDogcXVldWVkRXZlbnRzKQotICAgICAgICBkaXNwYXRj
aEV2ZW50KHF1ZXVlZEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQocXVl
dWVkRXZlbnQpOwogfQogCiB2b2lkIFNjb3BlZEV2ZW50UXVldWU6OmluY3JlbWVudFNjb3BpbmdM
ZXZlbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuaAppbmRleCBjZjZiMjljOGQ5
OTEzN2IwNWVjNjRlNjA0N2YzNDJlNWEyN2RmY2IwLi43OGJiYzY1ZjM5YWRkMzdkNDIxYmUwNDJl
MzA5ZjliZmFiMDUxNzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZl
bnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmgKQEAg
LTQ2LDE4ICs0NiwxOCBAQCBjbGFzcyBTY29wZWRFdmVudFF1ZXVlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTY29wZWRFdmVudFF1ZXVlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFNjb3BlZEV2ZW50UXVldWUmIHNpbmdsZXRvbigpOwotICAgIHZv
aWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVucXVldWVFdmVu
dChSZWY8RXZlbnQ+JiYpOwogCiBwcml2YXRlOgogICAgIFNjb3BlZEV2ZW50UXVldWUoKSA9IGRl
ZmF1bHQ7CiAgICAgflNjb3BlZEV2ZW50UXVldWUoKSA9IGRlbGV0ZTsKIAotICAgIHZvaWQgZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PikgY29uc3Q7CisgICAgdm9pZCBkaXNwYXRjaEV2
ZW50KEV2ZW50JikgY29uc3Q7CiAgICAgdm9pZCBkaXNwYXRjaEFsbEV2ZW50cygpOwogICAgIHZv
aWQgaW5jcmVtZW50U2NvcGluZ0xldmVsKCk7CiAgICAgdm9pZCBkZWNyZW1lbnRTY29waW5nTGV2
ZWwoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3F1ZXVlZEV2ZW50czsKKyAgICBW
ZWN0b3I8UmVmPEV2ZW50Pj4gbV9xdWV1ZWRFdmVudHM7CiAgICAgdW5zaWduZWQgbV9zY29waW5n
TGV2ZWwgeyAwIH07CiAKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxXZWJD
b3JlOjpTY29wZWRFdmVudFF1ZXVlPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcAppbmRleCA0MmY1ZTc5OTM5MmY1MWZjNzlkZGQxMTM1MzM5MmFlNDc2
YmMyZWZiLi5mMDUyZDg2ZWI1NDUwYzI3MDM4YmQ1NGNkZGQ1NmM4Yzg1ZDA5OWY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC00MDQsNyAr
NDA0LDcgQEAgYm9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaXNwYXRjaEVycm9yRXZlbnQo
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludAogCiAgICAgQVNTRVJUKCFtX2luRGlzcGF0
Y2hFcnJvckV2ZW50KTsKICAgICBtX2luRGlzcGF0Y2hFcnJvckV2ZW50ID0gdHJ1ZTsKLSAgICBS
ZWZQdHI8RXJyb3JFdmVudD4gZXJyb3JFdmVudCA9IEVycm9yRXZlbnQ6OmNyZWF0ZShtZXNzYWdl
LCBzb3VyY2VOYW1lLCBsaW5lLCBjb2x1bW4pOworICAgIFJlZjxFcnJvckV2ZW50PiBlcnJvckV2
ZW50ID0gRXJyb3JFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsIHNvdXJjZU5hbWUsIGxpbmUsIGNvbHVt
bik7CiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGVycm9yRXZlbnQpOwogICAgIG1faW5EaXNw
YXRjaEVycm9yRXZlbnQgPSBmYWxzZTsKICAgICByZXR1cm4gZXJyb3JFdmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAKaW5kZXggNjg5Mzc3MGVlMDFkNmRiNWZhOTZlMTJhNDcwMzExMTZk
YzNiMzk3ZS4uYjcxZjk3M2U3ZTMwMWJlZDA0MTc3YWI3NmFhYWIwYTMxZTZjNTdmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
Y3BwCkBAIC02ODIsMTAgKzY4MiwxMCBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlYwogICAgIGlm
IChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKICAgICAgICAgdmlldy0+ZGlzYWJs
ZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigpOwogCi0gICAg
UmVmUHRyPFRleHRFdmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRpY3RhdGlvbiht
X2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2
ZXMpOworICAgIFJlZjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0
YXRpb24obV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgZGljdGF0aW9uQWx0
ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVu
dCk7CiAKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04p
OworICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT5k
ZWZhdWx0SGFuZGxlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYWY1
Mjg2ZGM5MWVhZmVlYWEwYWFiNmE5NjVmNDZmN2M5ODI1MGRlYy4uY2YxYmUyYWJlNjRmYTc0NmFl
NmIxMDViNDY0MTc4MGI3NDUwZTUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAt
NDYxLDcgKzQ2MSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmlu
ZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQogICAgIE5vZGUqIHRhcmdldCA9IGZp
bmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAg
cmV0dXJuOwotICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvclBs
YWluVGV4dFBhc3RlKGRvY3VtZW50KCkuZG9tV2luZG93KCksIHBhc3RpbmdUZXh0LCBzbWFydFJl
cGxhY2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoVGV4
dEV2ZW50OjpjcmVhdGVGb3JQbGFpblRleHRQYXN0ZShkb2N1bWVudCgpLmRvbVdpbmRvdygpLCBw
YXN0aW5nVGV4dCwgc21hcnRSZXBsYWNlKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzRnJh
Z21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBwYXN0aW5nRnJhZ21lbnQsIGJvb2wg
c21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgcmVz
cGVjdHNNYWlsQmxvY2txdW90ZSkKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEVkaXRvcjo6cGFz
dGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcGFzdGluZ0ZyYWdtZW50
LCBib29sCiAgICAgTm9kZSogdGFyZ2V0ID0gZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigp
OwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47Ci0gICAgdGFyZ2V0LT5kaXNwYXRj
aEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yRnJhZ21lbnRQYXN0ZShkb2N1bWVudCgpLmRvbVdp
bmRvdygpLCBwYXN0aW5nRnJhZ21lbnQsIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHlsZSwgcmVzcGVj
dHNNYWlsQmxvY2txdW90ZSksIElHTk9SRV9FWENFUFRJT04pOworICAgIHRhcmdldC0+ZGlzcGF0
Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckZyYWdtZW50UGFzdGUoZG9jdW1lbnQoKS5kb21X
aW5kb3coKSwgcGFzdGluZ0ZyYWdtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUsIHJlc3Bl
Y3RzTWFpbEJsb2NrcXVvdGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHRC
eXBhc3NpbmdESFRNTCgpCkBAIC04NTEsOCArODUxLDggQEAgYm9vbCBFZGl0b3I6OmRpc3BhdGNo
Q1BQRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERhdGFUcmFuc2ZlckFjY2Vz
c1AKIAogICAgIFJlZlB0cjxEYXRhVHJhbnNmZXI+IGRhdGFUcmFuc2ZlciA9IERhdGFUcmFuc2Zl
cjo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKHBvbGljeSk7CiAKLSAgICBSZWZQdHI8RXZlbnQ+IGV2
ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHRydWUsIHRydWUsIGRhdGFU
cmFuc2Zlcik7Ci0gICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJR05PUkVfRVhDRVBU
SU9OKTsKKyAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVu
dFR5cGUsIHRydWUsIHRydWUsIGRhdGFUcmFuc2Zlcik7CisgICAgdGFyZ2V0LT5kaXNwYXRjaEV2
ZW50KGV2ZW50KTsKICAgICBib29sIG5vRGVmYXVsdFByb2Nlc3NpbmcgPSBldmVudC0+ZGVmYXVs
dFByZXZlbnRlZCgpOwogICAgIGlmIChub0RlZmF1bHRQcm9jZXNzaW5nICYmIHBvbGljeSA9PSBE
YXRhVHJhbnNmZXJBY2Nlc3NQb2xpY3k6OldyaXRhYmxlKSB7CiAgICAgICAgIGF1dG8gcGFzdGVi
b2FyZCA9IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwpAQCAtMTAxMiw5ICsx
MDEyLDkgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRz
KFBhc3NSZWZQdHI8RWxlbWVudD4gcHJwU3RhcnRSb28KICAgICBSZWZQdHI8RWxlbWVudD4gc3Rh
cnRSb290ID0gcHJwU3RhcnRSb290OwogICAgIFJlZlB0cjxFbGVtZW50PiBlbmRSb290ID0gcHJw
RW5kUm9vdDsKICAgICBpZiAoc3RhcnRSb290KQotICAgICAgICBzdGFydFJvb3QtPmRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hh
bmdlZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgc3Rh
cnRSb290LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdEVk
aXRhYmxlQ29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgaWYgKGVuZFJv
b3QgJiYgZW5kUm9vdCAhPSBzdGFydFJvb3QpCi0gICAgICAgIGVuZFJvb3QtPmRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdl
ZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgZW5kUm9v
dC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJs
ZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiB2b2lkIEVkaXRvcjo6
YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gY21kKQpAQCAt
MTcyMCw4ICsxNzIwLDggQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgLy8gV2Ugc2hvdWxkIHNlbmQg
dGhpcyBldmVudCBiZWZvcmUgc2VuZGluZyBhIFRleHRFdmVudCBhcyB3cml0dGVuIGluIFNlY3Rp
b24gNi4yLjIgYW5kIDYuMi4zIG9mCiAgICAgLy8gdGhlIERPTSBFdmVudCBzcGVjaWZpY2F0aW9u
LgogICAgIGlmIChFbGVtZW50KiB0YXJnZXQgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCkp
IHsKLSAgICAgICAgUmVmUHRyPENvbXBvc2l0aW9uRXZlbnQ+IGV2ZW50ID0gQ29tcG9zaXRpb25F
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBkb2N1bWVudCgp
LmRvbVdpbmRvdygpLCB0ZXh0KTsKLSAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50
LnJlbGVhc2UoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIFJlZjxDb21wb3NpdGlvbkV2
ZW50PiBldmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcG9z
aXRpb25lbmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7CisgICAgICAgIHRh
cmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgfQogCiAgICAgLy8gSWYgdGV4dCBpcyBl
bXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJlLiAgSWYgdGV4dCBpcyBu
b24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dApAQCAtMTc5NSw4ICsxNzk1LDggQEAg
dm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBldmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcG9zaXRp
b25lbmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGV2ZW50LmdldCgpKQotICAgICAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50
KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKGV2ZW50KQorICAgICAgICAg
ICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KCpldmVudCk7CiAgICAgfQogCiAgICAgLy8gSWYgdGV4
dCBpcyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJlLiAgSWYgdGV4
dCBpcyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1YjY4ZjU3
Y2ZhYzBiYmNhOWYxOGI0MmIxYTVhYjBiMTVmYmM4NThiLi43ODk3MmM3NTIyNmJkZjU0Y2I3NDU0
OTcyNzg3NjNkYzQ3MmEwM2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTgyLDE2ICsxODIsMTYgQEAgUmVwbGFjZW1l
bnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIERvY3Vt
ZW50RnJhZ21lbnQqIGYKICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05vZGVzVG9G
cmFnbWVudChob2xkZXIuZ2V0KCkpOwogCiAgICAgLy8gR2l2ZSB0aGUgcm9vdCBhIGNoYW5jZSB0
byBjaGFuZ2UgdGhlIHRleHQuCi0gICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBl
dnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOwotICAgIGVkaXRhYmxl
Um9vdC0+ZGlzcGF0Y2hFdmVudChldnQsIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIGlmICh0
ZXh0ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhhc1JpY2hseUVkaXRhYmxlU3R5
bGUoKSkgeworICAgIFJlZjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOworICAgIGVkaXRhYmxlUm9vdC0+ZGlzcGF0
Y2hFdmVudChldmVudCk7CisgICAgaWYgKHRleHQgIT0gZXZlbnQtPnRleHQoKSB8fCAhZWRpdGFi
bGVSb290LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgcmVzdG9yZUFuZFJl
bW92ZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsKIAogICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9mcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldnQtPnRleHQoKSk7CisgICAg
ICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgZXZlbnQtPnRl
eHQoKSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJbnNl
cnRpb25CYXNlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJbnNlcnRp
b25CYXNlQ29tbWFuZC5jcHAKaW5kZXggZmQ3MjE5ZDYwYTNhOGZmYTY2NmUwMTVlNWRhMTA1MmIy
NmNjMWM1Yy4uY2NjM2RkZWFlMmU3ZTg1NmJmZDIzODNmZmVlZDUxMGMxNTQ3OGI3YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNw
cApAQCAtNjMsOSArNjMsOSBAQCBTdHJpbmcgZGlzcGF0Y2hCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGlmIChOb2Rl
KiBzdGFydE5vZGUgPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uc3RhcnQoKS5jb250YWluZXJOb2Rl
KCkpIHsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7CiAg
ICAgICAgICAgICAvLyBTZW5kIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LiBUaGUgZXZlbnQgaGFu
ZGxlciB3aWxsIHVwZGF0ZSB0ZXh0IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIFJlZlB0cjxC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZ0ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNy
ZWF0ZSh0ZXh0KTsKLSAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
LT5kaXNwYXRjaEV2ZW50KGV2dCwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICBuZXdU
ZXh0ID0gZXZ0LT50ZXh0KCk7CisgICAgICAgICAgICBSZWY8QmVmb3JlVGV4dEluc2VydGVkRXZl
bnQ+IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZSh0ZXh0KTsKKyAgICAg
ICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5kaXNwYXRjaEV2ZW50KGV2
ZW50KTsKKyAgICAgICAgICAgIG5ld1RleHQgPSBldmVudC0+dGV4dCgpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBuZXdUZXh0OwpAQCAtNzcsOCArNzcsOCBAQCBib29sIGNhbkFwcGVu
ZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlZlB0
cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dDo6Y3JlYXRlKFN0cmluZygiXG4iKSk7Ci0gICAgbm9kZS0+ZGlzcGF0Y2hFdmVudChldmVudCwg
SUdOT1JFX0VYQ0VQVElPTik7CisgICAgUmVmPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldmVu
dCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUoU3RyaW5nKCJcbiIpKTsKKyAgICBu
b2RlLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPnRleHQoKS5sZW5n
dGgoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXgg
OTU3YTk3ZWFhMjQzNzg0Y2JmNTMyOGNkZWU3MTMwZjg0NjZlMmQ4YS4uMGFkNjFmMzdlYzIxY2I0
MWE4MTI2ZWUzNDYzNDI2NTA2NmFkMmQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC01MTIwLDEwICs1MTIwLDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjptZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKE1lZGlh
UGwKICAgICB1cGRhdGVNZWRpYVN0YXRlKFVwZGF0ZU1lZGlhU3RhdGU6OkFzeW5jaHJvbm91c2x5
KTsKIH0KIAotYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IHBycEV2ZW50KQorYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRjaEV2ZW50KEV2
ZW50JiBldmVudCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7Ci0gICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3Rh
cmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVu
dCkKICAgICAgICAgc2NoZWR1bGVEZWxheWVkQWN0aW9uKENoZWNrUGxheWJhY2tUYXJnZXRDb21w
YXRhYmxpdHkpOwogICAgIHJldHVybiBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hFdmVudChldmVudCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDA1MGFjYjQ2MDcx
YTRmZWM1NGFmMWM2ZmU3ZjMxZjBhZTE5ODA1OTMuLmEwM2YyYzRmYzZmZGVmNmYyZWE3ZjJmNGUz
ZTA4NTY1YWVlZmZiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBA
IC01NjQsNyArNTY0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVucXVldWVQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVudCgpOwogCiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRp
c3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikg
b3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKaW5kZXggZDZiMWY5YTZlYjRkNzJkOTllMGFk
OTFiODUyNGI5ZDRmOGM0NTE0NS4uYjNlYjNiODA0ZWRiNDNjNWU3OGI4ZTRjZGU3MTljZTBjYmRl
MmM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCkBAIC0yNjAs
NyArMjYwLDcgQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpkaWRDb21wbGV0ZUxvYWQoTG9hZFN0
YXR1cyBzdGF0dXMpCiAKICAgICBpZiAoc3RhdHVzID09IEZhaWx1cmUpIHsKICAgICAgICAgc2V0
UmVhZHlTdGF0ZShIVE1MVHJhY2tFbGVtZW50OjpUUkFDS19FUlJPUik7Ci0gICAgICAgIGRpc3Bh
dGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZh
bHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6
OmRpZENvbXBsZXRlTG9hZChMb2FkU3RhdHVzIHN0YXR1cykKIAogICAgIC8vICAgICAyLiBJZiB0
aGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCwgZmlyZSBhIHNpbXBsZSBldmVudCBu
YW1lZCBsb2FkIGF0IHRoZSAKICAgICAvLyAgICAgICAgdHJhY2sgZWxlbWVudC4KLSAgICBkaXNw
YXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZh
bHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiAvLyBOT1RFOiBU
aGUgdmFsdWVzIGluIHRoZSBUZXh0VHJhY2s6OlJlYWRpbmVzc1N0YXRlIGVudW0gbXVzdCBzdGF5
IGluIHN5bmMgd2l0aCB0aG9zZSBpbiBIVE1MVHJhY2tFbGVtZW50OjpSZWFkeVN0YXRlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCmluZGV4IDk2MzcyNDQ2NzY4NzQwNGVk
NjJlZTM3ZDAxNGVmNGQ2NTMzNzA3MjEuLmRiYjAyYWI5ZTk0OTEyMTk0NmEwMGViYWQ3M2ExODIw
YzdmMTZiMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5jcHAKQEAgLTU0
NCwxMSArNTQ0LDExIEBAIHZvaWQgTWVkaWFDb250cm9sbGVyOjpzY2hlZHVsZUV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKQogCiB2b2lkIE1lZGlhQ29udHJvbGxlcjo6YXN5bmNF
dmVudFRpbWVyRmlyZWQoKQogewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBwZW5kaW5nRXZl
bnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBwZW5kaW5nRXZlbnRzOwogCiAgICAgbV9wZW5k
aW5nRXZlbnRzLnN3YXAocGVuZGluZ0V2ZW50cyk7CiAgICAgZm9yIChhdXRvJiBwZW5kaW5nRXZl
bnQgOiBwZW5kaW5nRXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRpbmdFdmVudC5y
ZWxlYXNlKCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRp
bmdFdmVudCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sbGVyOjpjbGVhclBvc2l0aW9uVGltZXJG
aXJlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaAppbmRleCA3NTMzYjQ4YzI3
OGY1ZDYxYzVmNmUwMjJjZTc0YzM2MTg1Njg0MmJjLi4zMTVlZWNkMTkxYTNjNjc5YTEyMjBjYzBm
NmQ5YjgzY2QwZjI1MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmgKQEAg
LTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tdXRlZDsKICAgICBSZWFkeVN0
YXRlIG1fcmVhZHlTdGF0ZTsKICAgICBQbGF5YmFja1N0YXRlIG1fcGxheWJhY2tTdGF0ZTsKLSAg
ICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9wZW5kaW5nRXZlbnRzOworICAgIFZlY3RvcjxSZWY8
RXZlbnQ+PiBtX3BlbmRpbmdFdmVudHM7CiAgICAgVGltZXIgbV9hc3luY0V2ZW50VGltZXI7CiAg
ICAgbXV0YWJsZSBUaW1lciBtX2NsZWFyUG9zaXRpb25UaW1lcjsKICAgICBTdHJpbmcgbV9tZWRp
YUdyb3VwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCAzMzBjOTUwNGIwNzY5ZDk0MDcyMzE3ZGRkMjk5
M2QyOThiOWY5YWRjLi5lZDMwNDlkMzg2NjY0OTQ1ZTA5OWQ2NjNkYTgyOWRiNjU5MjM4ZDA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcApAQCAtNDc2Niw3ICs0NzY2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigp
CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2
ZW50KCkKIHsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250
ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIiIpOworICAgIFJlZjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENv
bnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZh
bHNlLCB0cnVlLCAiIik7CiAgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAg
IG1fcmVzdG9yZUFsbG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwogICAgIGlmICht
X2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5k
ZXggZWVhMGVjNzU3NWQ3NzNjOGI0OTU1NWI4NmQ2NGI5ODAzZmVmYWNiOC4uZWRiMDYyNzJjYzgw
MTk0Nzk4YmZhMmZlZjBiNGIwNDFiYWQxYWZkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFVS
TCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAg
cmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKTsKIH0KIAotaW5saW5l
IFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpCitpbmxpbmUgUmVmPEV2
ZW50PiBjcmVhdGVTY3JpcHRMb2FkRXZlbnQoKQogewogICAgIHJldHVybiBFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKaW5kZXggYzI0NThkMjVlYTk0ODNmNGQ4NmE2
M2M1MDg2NzY1ZDVmNTYzOGUxNC4uYTZiMWRiYjg4NDRlNzMxMWM1NmE4NGI4NWIzOGQzNzcxYjEz
NjEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcApAQCAt
MTkwLDcgKzE5MCw3IEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjppbnZhbGlkYXRlQ3VlSW5kZXgoKQog
ICAgIG1fY3VlSW5kZXggPSBpbnZhbGlkQ3VlSW5kZXg7CiB9CiAKLWJvb2wgVGV4dFRyYWNrQ3Vl
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBUZXh0VHJhY2tD
dWU6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIC8vIFdoZW4gYSBUZXh0VHJh
Y2sncyBtb2RlIGlzIGRpc2FibGVkOiBubyBjdWVzIGFyZSBhY3RpdmUsIG5vIGV2ZW50cyBmaXJl
ZC4KICAgICBpZiAoIXRyYWNrKCkgfHwgdHJhY2soKS0+bW9kZSgpID09IFRleHRUcmFjazo6ZGlz
YWJsZWRLZXl3b3JkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaApp
bmRleCBlYzJhYjIyZTJmNzYzZTg0MDdmYTNkMTg5ZDk2ZGJjMGU4ZDZjYjgyLi42NGU2ZmQyNTBi
Y2YxYjM5OWRjMjMzZTNmNDEyMWVkYTg4Y2E1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW52
YWxpZGF0ZUN1ZUluZGV4KCk7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVu
dDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsK
IAogICAgIGJvb2wgaXNBY3RpdmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY3RpdmUoYm9v
bCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA5ZDA2MTk5NmQ3NzM2
ZDY5YTAxNmJiMDUyN2U4ZDM1ZDM1MDE2MWU2Li42OGRlZDIzMTUzZTA3NmNlMWZkMTZmYmI1ZDNm
ZTJmMTlkYTI5YTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTI4
NTksNyArMjg1OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmhhbmRsZVVubG9hZEV2ZW50cyhVbmxv
YWRFdmVudFBvbGljeSB1bmxvYWRFdmVudFBvbGljeSkKICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY3NzAKIAogICAgICAgICAgICAgaWYg
KCFtX2ZyYW1lLmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8RXZlbnQ+IHVubG9hZEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9h
ZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBSZWY8RXZlbnQ+IHVubG9h
ZEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFs
c2UpKTsKICAgICAgICAgICAgICAgICAvLyBUaGUgRG9jdW1lbnRMb2FkZXIgKGFuZCB0aHVzIGl0
cyBEb2N1bWVudExvYWRUaW1pbmcpIG1pZ2h0IGdldCBkZXN0cm95ZWQKICAgICAgICAgICAgICAg
ICAvLyB3aGlsZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQsIHNvIHByb3RlY3QgaXQgdG8gcHJldmVu
dCB3cml0aW5nIHRoZSBlbmQKICAgICAgICAgICAgICAgICAvLyB0aW1lIGludG8gZnJlZWQgbWVt
b3J5LgpAQCAtMjkwNSwxOCArMjkwNSwxOCBAQCBib29sIEZyYW1lTG9hZGVyOjpoYW5kbGVCZWZv
cmVVbmxvYWRFdmVudChDaHJvbWUmIGNocm9tZSwgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZAogICAg
IGlmICghZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIAotICAgIFJlZlB0cjxCZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2FkRXZlbnQgPSBC
ZWZvcmVVbmxvYWRFdmVudDo6Y3JlYXRlKCk7CisgICAgUmVmPEJlZm9yZVVubG9hZEV2ZW50PiBi
ZWZvcmVVbmxvYWRFdmVudCA9IEJlZm9yZVVubG9hZEV2ZW50OjpjcmVhdGUoKTsKICAgICBtX3Bh
Z2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IFBhZ2VEaXNtaXNzYWxUeXBlOjpCZWZv
cmVVbmxvYWQ7CiAKICAgICB7CiAgICAgICAgIEZvcmJpZFByb21wdHNTY29wZSBmb3JiaWRQcm9t
cHRzKG1fZnJhbWUucGFnZSgpKTsKLSAgICAgICAgZG9tV2luZG93LT5kaXNwYXRjaEV2ZW50KGJl
Zm9yZVVubG9hZEV2ZW50LmdldCgpLCBkb21XaW5kb3ctPmRvY3VtZW50KCkpOworICAgICAgICBk
b21XaW5kb3ctPmRpc3BhdGNoRXZlbnQoYmVmb3JlVW5sb2FkRXZlbnQsIGRvbVdpbmRvdy0+ZG9j
dW1lbnQoKSk7CiAgICAgfQogCiAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNo
ZWQgPSBQYWdlRGlzbWlzc2FsVHlwZTo6Tm9uZTsKIAogICAgIGlmICghYmVmb3JlVW5sb2FkRXZl
bnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSkKLSAgICAgICAgZG9jdW1lbnQtPmRlZmF1bHRFdmVudEhh
bmRsZXIoYmVmb3JlVW5sb2FkRXZlbnQuZ2V0KCkpOworICAgICAgICBkb2N1bWVudC0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihiZWZvcmVVbmxvYWRFdmVudC5wdHIoKSk7CiAgICAgaWYgKGJlZm9yZVVu
bG9hZEV2ZW50LT5yZXR1cm5WYWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlSG9zdC5jcHAKaW5kZXggOTg5MDk5NDBlMzQ0ZjNiMjg2YjIwY2I1MWFkMTIwODA2ZjIy
M2QyMy4uODhlN2VlMmIyNTMxZGZmNzE3NjFmMmM1ZTcwY2U0ODJlODhiYTRlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhv
c3QuY3BwCkBAIC0zNTAsNyArMzUwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZGlz
cGF0Y2hET01FdmVudChFdmVudElEIGlkLCBpbnQgdG90YWwsIGludCBkb25lKQogICAgICAgICAg
ICAgZXZlbnQgPSBQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVlLCBkb25lLCB0
b3RhbCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShl
dmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG1fZG9tQXBwbGljYXRpb25DYWNoZS0+
ZGlzcGF0Y2hFdmVudChldmVudCwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIG1fZG9t
QXBwbGljYXRpb25DYWNoZS0+ZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDFlZmFlYjQxYTc4ZjJlY2E5ODg1M2Y3NzIxZDll
OGU1Zjk0NWU4NTkuLmY4OWUxOTQ2ODg5NGYzNTMwMmRkNTVjZjA0ZTMxYzBlNmMyYTk2M2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIFJlZjxNZXNzYWdlRXZlbnQ+IGV2ZW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFu
Z2xlUG9ydHMoKmNvbnRleHQsIFdURjo6bW92ZShtX2NoYW5uZWxzKSk7CiAgICAgICAgIHJldHVy
biBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZVBvcnRzKSwgbV9tZXNzYWdl
LCBtX29yaWdpbiwgU3RyaW5nKCksIG1fc291cmNlKTsKQEAgLTkyOCw3ICs5MjgsNyBAQCB2b2lk
IERPTVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGltZXImIHRpbWVy
KQogICAgIGRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKHRpbWVyLnRhcmdldE9y
aWdpbigpLCB0aW1lci5ldmVudChkb2N1bWVudCgpKSwgdGltZXIuc3RhY2tUcmFjZSgpKTsKIH0K
IAotdm9pZCBET01XaW5kb3c6OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNl
Y3VyaXR5T3JpZ2luKiBpbnRlbmRlZFRhcmdldE9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlKQordm9pZCBET01XaW5k
b3c6OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3VyaXR5T3JpZ2luKiBp
bnRlbmRlZFRhcmdldE9yaWdpbiwgRXZlbnQmIGV2ZW50LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gc3RhY2tUcmFjZSkKIHsKICAgICBpZiAoaW50ZW5kZWRUYXJnZXRPcmlnaW4pIHsKICAg
ICAgICAgLy8gQ2hlY2sgdGFyZ2V0IG9yaWdpbiBub3cgc2luY2UgdGhlIHRhcmdldCBkb2N1bWVu
dCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSB0aW1lciB3YXMgc2NoZWR1bGVkLgpAQCAtMTg3
MCw3ICsxODcwLDcgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIKIAogdm9pZCBET01XaW5kb3c6
OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGxvYWRFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworICAgIFJl
ZjxFdmVudD4gbG9hZEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50
LCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmxvYWRlcigpLmRv
Y3VtZW50TG9hZGVyKCkgJiYgIW1fZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnRp
bWluZygpLmxvYWRFdmVudFN0YXJ0KCkpIHsKICAgICAgICAgLy8gVGhlIERvY3VtZW50TG9hZGVy
IChhbmQgdGh1cyBpdHMgRG9jdW1lbnRMb2FkVGltaW5nKSBtaWdodCBnZXQgZGVzdHJveWVkIHdo
aWxlIGRpc3BhdGNoaW5nCiAgICAgICAgIC8vIHRoZSBldmVudCwgc28gcHJvdGVjdCBpdCB0byBw
cmV2ZW50IHdyaXRpbmcgdGhlIGVuZCB0aW1lIGludG8gZnJlZWQgbWVtb3J5LgpAQCAtMTg5Miwz
NCArMTg5MiwzMyBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9hZEV2ZW50RmlyZWQoZnJhbWUoKSk7CiB9CiAKLWJv
b2wgRE9NV2luZG93OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50LCBQ
YXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBUYXJnZXQpCitib29sIERPTVdpbmRvdzo6ZGlzcGF0
Y2hFdmVudChFdmVudCYgZXZlbnQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAgICAgUmVmPEV2
ZW50VGFyZ2V0PiBwcm90ZWN0KCp0aGlzKTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJw
RXZlbnQ7CiAKICAgICAvLyBQYXVzaW5nIGEgcGFnZSBtYXkgdHJpZ2dlciBwYWdlaGlkZSBhbmQg
cGFnZXNob3cgZXZlbnRzLiBXZWJDb3JlIGFsc28gaW1wbGljaXRseSBmaXJlcyB0aGVzZQogICAg
IC8vIGV2ZW50cyB3aGVuIGNsb3NpbmcgYSBXZWJWaWV3LiBIZXJlIHdlIGtlZXAgdHJhY2sgb2Yg
dGhlIHN0YXRlIG9mIHRoZSBwYWdlIHRvIHByZXZlbnQgZHVwbGljYXRlLAogICAgIC8vIHVuYmFs
YW5jZWQgZXZlbnRzIHBlciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcGFnZXNob3cgZXZlbnQ6CiAg
ICAgLy8gPGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsv
bXVsdGlwYWdlL2hpc3RvcnkuaHRtbCNldmVudC1wYWdlc2hvdz4uCi0gICAgaWYgKGV2ZW50LT5l
dmVudEludGVyZmFjZSgpID09IFBhZ2VUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VUeXBlKSB7Ci0g
ICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wYWdlc2hvd0V2ZW50KSB7
CisgICAgaWYgKGV2ZW50LmV2ZW50SW50ZXJmYWNlKCkgPT0gUGFnZVRyYW5zaXRpb25FdmVudElu
dGVyZmFjZVR5cGUpIHsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
cGFnZXNob3dFdmVudCkgewogICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFn
ZVN0YXR1c1Nob3duKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBFdmVudCB3YXMg
cHJldmlvdXNseSBkaXNwYXRjaGVkOyBkbyBub3QgZmlyZSBhIGR1cGxpY2F0ZSBldmVudC4KICAg
ICAgICAgICAgIG1fbGFzdFBhZ2VTdGF0dXMgPSBQYWdlU3RhdHVzU2hvd247Ci0gICAgICAgIH0g
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCkgewor
ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZWhpZGVF
dmVudCkgewogICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFnZVN0YXR1c0hp
ZGRlbikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRXZlbnQgd2FzIHByZXZpb3Vz
bHkgZGlzcGF0Y2hlZDsgZG8gbm90IGZpcmUgYSBkdXBsaWNhdGUgZXZlbnQuCiAgICAgICAgICAg
ICBtX2xhc3RQYWdlU3RhdHVzID0gUGFnZVN0YXR1c0hpZGRlbjsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGV2ZW50LT5zZXRUYXJnZXQocHJwVGFyZ2V0ID8gcHJwVGFyZ2V0IDogdGhpcyk7Ci0g
ICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KHRhcmdldCA/IHRhcmdl
dCA6IHRoaXMpOworICAgIGV2ZW50LnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgZXZlbnQu
c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKIAotICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNw
YXRjaEV2ZW50T25XaW5kb3coZnJhbWUoKSwgKmV2ZW50LCAqdGhpcyk7CisgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbERpc3BhdGNoRXZlbnRPbldpbmRvdyhmcmFtZSgpLCBldmVudCwgKnRoaXMpOwogCi0gICAg
Ym9vbCByZXN1bHQgPSBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQuZ2V0KCkpOworICAgIGJvb2wg
cmVzdWx0ID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIAogICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93KGNvb2tpZSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5oCmluZGV4IDBkOGQ5NTM1YWI3NDNkOTI5Njc1YTViYzQwYjE0NDI4YjhjNTI3
ZWQuLmI1MDAxYmNmMWI3MDZmZTcwZWI0OGY0YTc4NzFlNzI2YjJiYTFhNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuaApAQCAtMjQ0LDcgKzI0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgLy8gTmVlZGVkIGZvciBPYmplY3RpdmUtQyBiaW5kaW5ncyAoc2VlIGJ1ZyAyODc3NCku
CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERP
TVdpbmRvdyYgc291cmNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgcG9zdE1lc3Nh
Z2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGltZXImKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaE1l
c3NhZ2VFdmVudFdpdGhPcmlnaW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5kZWRUYXJnZXRP
cmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPik7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRoT3JpZ2luQ2hl
Y2soU2VjdXJpdHlPcmlnaW4qIGludGVuZGVkVGFyZ2V0T3JpZ2luLCBFdmVudCYsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+KTsKIAogICAgICAgICB2b2lkIHNjcm9sbEJ5
KGludCB4LCBpbnQgeSkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2Nyb2xsVG8oaW50IHgsIGludCB5
KSBjb25zdDsKQEAgLTI3OCw3ICsyNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpIG92ZXJyaWRlOwogCiAgICAg
ICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgICAgICBib29sIGRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJn
ZXQ+IHBycFRhcmdldCk7CisgICAgICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYsIEV2ZW50
VGFyZ2V0Kik7CiAKICAgICAgICAgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcAppbmRleCA5MjU3NTRlYzQzNjEwZTdhN2Y2
OTliNjg0ODE1MmU3MmM4NWFmNjIxLi5iNGMzMmYyMDhkYzEzZTBhMjk0Y2FlYTcxZDFlNmQ4ZDdm
OGM3N2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5jcHAKQEAgLTcx
LDkgKzcxLDggQEAgdm9pZCBEZXZpY2VDb250cm9sbGVyOjpyZW1vdmVBbGxEZXZpY2VFdmVudExp
c3RlbmVycyhET01XaW5kb3cqIHdpbmRvdykKICAgICAgICAgbV9jbGllbnQtPnN0b3BVcGRhdGlu
ZygpOwogfQogCi12b2lkIERldmljZUNvbnRyb2xsZXI6OmRpc3BhdGNoRGV2aWNlRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCit2b2lkIERldmljZUNvbnRyb2xsZXI6OmRpc3BhdGNo
RGV2aWNlRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBw
cnBFdmVudDsKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4+IGxpc3RlbmVyVmVjdG9yOwog
ICAgIGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycywgbGlzdGVuZXJWZWN0b3IpOwogICAgIGZvciAo
YXV0byYgbGlzdGVuZXIgOiBsaXN0ZW5lclZlY3RvcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Rldmlj
ZUNvbnRyb2xsZXIuaAppbmRleCBmZGY1ZDFkOTZkMTU3NzY3NmNhOTA5ZjkxODkzYzU3Zjk4MDhh
NWNmLi5jOTMxYzNhOGRlZjJlOTVkNTA5YjkwY2QzNTBiMTJkZGEzNDE0N2UwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuaApAQCAtNDgsMTIgKzQ4LDEyIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlbW92ZURldmljZUV2ZW50TGlzdGVuZXIoRE9NV2luZG93Kik7CiAgICAgdm9p
ZCByZW1vdmVBbGxEZXZpY2VFdmVudExpc3RlbmVycyhET01XaW5kb3cqKTsKIAotICAgIHZvaWQg
ZGlzcGF0Y2hEZXZpY2VFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBkaXNwYXRj
aERldmljZUV2ZW50KEV2ZW50Jik7CiAgICAgYm9vbCBpc0FjdGl2ZSgpIHsgcmV0dXJuICFtX2xp
c3RlbmVycy5pc0VtcHR5KCk7IH0KICAgICBEZXZpY2VDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJu
IG1fY2xpZW50OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGFzdERhdGEoKSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUmVmPEV2ZW50PiBnZXRMYXN0RXZlbnQoKSA9IDA7CiAK
IHByb3RlY3RlZDoKICAgICB2b2lkIGZpcmVEZXZpY2VFdmVudCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RyYWdDb250cm9sbGVyLmNwcAppbmRleCAwNTBiNjI4OTVhZWE3MzY0OWQyYWU0NjRlNTlmYzY4
M2YxYTZiOWQwLi5kYWEwZjk4ZjljMGEyNTY2ZTEwODllNTBkOWRkNTYwYjhlZGY3N2QzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNDQ2LDcgKzQ0Niw3IEBAIGJv
b2wgRHJhZ0NvbnRyb2xsZXI6OmRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqIGlubmVy
RnJhbWUsIERyYWdEYXRhJiBkcmFnCiAgICAgQVNTRVJUKG1fcGFnZS5kcmFnQ2FyZXRDb250cm9s
bGVyKCkuaGFzQ2FyZXQoKSk7CiAgICAgU3RyaW5nIHRleHQgPSBtX3BhZ2UuZHJhZ0NhcmV0Q29u
dHJvbGxlcigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgPyBlbXB0eVN0cmluZygpIDogZHJh
Z0RhdGEuYXNQbGFpblRleHQoKTsKICAgICBOb2RlKiB0YXJnZXQgPSBpbm5lckZyYW1lLT5lZGl0
b3IoKS5maW5kRXZlbnRUYXJnZXRGcm9tKG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuY2Fy
ZXRQb3NpdGlvbigpKTsKLSAgICByZXR1cm4gdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVu
dDo6Y3JlYXRlRm9yRHJvcChpbm5lckZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4
dCksIElHTk9SRV9FWENFUFRJT04pOworICAgIHJldHVybiB0YXJnZXQtPmRpc3BhdGNoRXZlbnQo
VGV4dEV2ZW50OjpjcmVhdGVGb3JEcm9wKGlubmVyRnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRv
dygpLCB0ZXh0KSk7CiB9CiAKIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWco
RHJhZ0RhdGEmIGRyYWdEYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4
IDY3MGUxMzVmM2QzNGZkMzM2NmQzODhhNmU5MDA2Yzc1YzFlZDRmYTMuLmM3MWQ5YTIzYTRiYTBh
MDUwZDE1YmQ4NDUxMjQ2MjU3ZDYwMTY1ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKQEAgLTMwMTIsMTMgKzMwMTIsMTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50
KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgaW5pdGlhbEtleUV2ZW50KQogICAgIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudCBrZXlEb3duRXZlbnQgPSBpbml0aWFsS2V5RXZlbnQ7ICAgIAogICAg
IGlmIChrZXlEb3duRXZlbnQudHlwZSgpICE9IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pCiAg
ICAgICAgIGtleURvd25FdmVudC5kaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1FdmVu
dDo6UmF3S2V5RG93biwgYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSk7Ci0gICAgUmVmUHRyPEtl
eWJvYXJkRXZlbnQ+IGtleWRvd24gPSBLZXlib2FyZEV2ZW50OjpjcmVhdGUoa2V5RG93bkV2ZW50
LCBtX2ZyYW1lLmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCkpOworICAgIFJlZjxLZXlib2FyZEV2
ZW50PiBrZXlkb3duID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleURvd25FdmVudCwgbV9mcmFt
ZS5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpKTsKICAgICBpZiAobWF0Y2hlZEFuQWNjZXNzS2V5
KQogICAgICAgICBrZXlkb3duLT5zZXREZWZhdWx0UHJldmVudGVkKHRydWUpOwogICAgIGtleWRv
d24tPnNldFRhcmdldChlbGVtZW50KTsKIAogICAgIGlmIChpbml0aWFsS2V5RXZlbnQudHlwZSgp
ID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pIHsKLSAgICAgICAgZWxlbWVudC0+ZGlzcGF0
Y2hFdmVudChrZXlkb3duLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgZWxlbWVudC0+ZGlz
cGF0Y2hFdmVudChrZXlkb3duKTsKICAgICAgICAgLy8gSWYgZnJhbWUgY2hhbmdlZCBhcyBhIHJl
c3VsdCBvZiBrZXlkb3duIGRpc3BhdGNoLCB0aGVuIHJldHVybiB0cnVlIHRvIGF2b2lkIHNlbmRp
bmcgYSBzdWJzZXF1ZW50IGtleXByZXNzIG1lc3NhZ2UgdG8gdGhlIG5ldyBmcmFtZS4KICAgICAg
ICAgYm9vbCBjaGFuZ2VkRm9jdXNlZEZyYW1lID0gbV9mcmFtZS5wYWdlKCkgJiYgJm1fZnJhbWUg
IT0gJm1fZnJhbWUucGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKICAgICAgICAgcmV0dXJuIGtleWRvd24tPmRlZmF1bHRIYW5kbGVkKCkgfHwga2V5ZG93bi0+
ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGNoYW5nZWRGb2N1c2VkRnJhbWU7CkBAIC0zMDI5LDcgKzMw
MjksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50JiBpbml0aWFsS2V5RXZlbnQpCiAgICAgLy8gaW4gb3JkZXIgdG8gbWF0Y2ggSUU6CiAg
ICAgLy8gMS4gcHJldmVudGluZyBkZWZhdWx0IGhhbmRsaW5nIG9mIGtleWRvd24gYW5kIGtleXBy
ZXNzIGV2ZW50cyBoYXMgbm8gZWZmZWN0IG9uIElNIGlucHV0OwogICAgIC8vIDIuIGlmIGFuIGlu
cHV0IG1ldGhvZCBoYW5kbGVzIHRoZSBldmVudCwgaXRzIGtleUNvZGUgaXMgc2V0IHRvIDIyOSBp
biBrZXlkb3duIGV2ZW50LgotICAgIG1fZnJhbWUuZWRpdG9yKCkuaGFuZGxlSW5wdXRNZXRob2RL
ZXlkb3duKGtleWRvd24uZ2V0KCkpOworICAgIG1fZnJhbWUuZWRpdG9yKCkuaGFuZGxlSW5wdXRN
ZXRob2RLZXlkb3duKGtleWRvd24ucHRyKCkpOwogICAgIAogICAgIGJvb2wgaGFuZGxlZEJ5SW5w
dXRNZXRob2QgPSBrZXlkb3duLT5kZWZhdWx0SGFuZGxlZCgpOwogICAgIApAQCAtMzA0MCwxMCAr
MzA0MCwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXli
b2FyZEV2ZW50JiBpbml0aWFsS2V5RXZlbnQpCiAgICAgICAgIGtleWRvd24tPnNldERlZmF1bHRI
YW5kbGVkKCk7CiAgICAgfQogICAgIAotICAgIGlmIChhY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVu
dFByb3BvZ2F0aW9uKGtleWRvd24uZ2V0KCkpKQorICAgIGlmIChhY2Nlc3NpYmlsaXR5UHJldmVu
dHNFdmVudFByb3BvZ2F0aW9uKGtleWRvd24pKQogICAgICAgICBrZXlkb3duLT5zdG9wUHJvcGFn
YXRpb24oKTsKIAotICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93biwgSUdOT1JFX0VY
Q0VQVElPTik7CisgICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChrZXlkb3duKTsKICAgICAvLyBJ
ZiBmcmFtZSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIGtleWRvd24gZGlzcGF0Y2gsIHRoZW4gcmV0
dXJuIGVhcmx5IHRvIGF2b2lkIHNlbmRpbmcgYSBzdWJzZXF1ZW50IGtleXByZXNzIG1lc3NhZ2Ug
dG8gdGhlIG5ldyBmcmFtZS4KICAgICBib29sIGNoYW5nZWRGb2N1c2VkRnJhbWUgPSBtX2ZyYW1l
LnBhZ2UoKSAmJiAmbV9mcmFtZSAhPSAmbV9mcmFtZS5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGJvb2wga2V5ZG93blJlc3VsdCA9IGtleWRvd24t
PmRlZmF1bHRIYW5kbGVkKCkgfHwga2V5ZG93bi0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGNoYW5n
ZWRGb2N1c2VkRnJhbWU7CkBAIC0zMDYyLDE0ICszMDYyLDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjprZXlFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkK
ICAgICBrZXlQcmVzc0V2ZW50LmRpc2FtYmlndWF0ZUtleURvd25FdmVudChQbGF0Zm9ybUV2ZW50
OjpDaGFyLCBiYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKTsKICAgICBpZiAoa2V5UHJlc3NFdmVu
dC50ZXh0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4ga2V5ZG93blJlc3VsdDsKLSAgICBS
ZWZQdHI8S2V5Ym9hcmRFdmVudD4ga2V5cHJlc3MgPSBLZXlib2FyZEV2ZW50OjpjcmVhdGUoa2V5
UHJlc3NFdmVudCwgbV9mcmFtZS5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpKTsKKyAgICBSZWY8
S2V5Ym9hcmRFdmVudD4ga2V5cHJlc3MgPSBLZXlib2FyZEV2ZW50OjpjcmVhdGUoa2V5UHJlc3NF
dmVudCwgbV9mcmFtZS5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpKTsKICAgICBrZXlwcmVzcy0+
c2V0VGFyZ2V0KGVsZW1lbnQpOwogICAgIGlmIChrZXlkb3duUmVzdWx0KQogICAgICAgICBrZXlw
cmVzcy0+c2V0RGVmYXVsdFByZXZlbnRlZCh0cnVlKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICBrZXlwcmVzcy0+a2V5cHJlc3NDb21tYW5kcygpID0ga2V5ZG93bi0+a2V5cHJlc3NDb21tYW5k
cygpOwogI2VuZGlmCi0gICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChrZXlwcmVzcywgSUdOT1JF
X0VYQ0VQVElPTik7CisgICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChrZXlwcmVzcyk7CiAKICAg
ICByZXR1cm4ga2V5ZG93blJlc3VsdCB8fCBrZXlwcmVzcy0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8
IGtleXByZXNzLT5kZWZhdWx0SGFuZGxlZCgpOwogfQpAQCAtMzE4Niw3ICszMTg2LDcgQEAgdm9p
ZCBFdmVudEhhbmRsZXI6OmhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1lbnRGb3JBY2Nlc3Np
YmlsaXR5KEtleWJvYXJkRXZlbnQKICAgICB9CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjphY2Nl
c3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQqIGV2ZW50KQor
Ym9vbCBFdmVudEhhbmRsZXI6OmFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24o
S2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKCFB
WE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCgp
KQpAQCAtMzE5Niw5ICszMTk2LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmFjY2Vzc2liaWxpdHlQ
cmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIC8vIENoZWNrIGZvciBrZXkgZXZlbnRzIHRoYXQgYXJlIHJlbGV2
YW50IHRvIGFjY2Vzc2liaWxpdHk6IHRhYiBhbmQgYXJyb3dzIGtleXMgdGhhdCBjaGFuZ2UgZm9j
dXMKLSAgICBpZiAoZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDA5IikKKyAgICBpZiAo
ZXZlbnQua2V5SWRlbnRpZmllcigpID09ICJVKzAwMDkiKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBmb2N1c0RpcmVjdGlvbkZvcktleShldmVu
dC0+a2V5SWRlbnRpZmllcigpKTsKKyAgICBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBmb2N1
c0RpcmVjdGlvbkZvcktleShldmVudC5rZXlJZGVudGlmaWVyKCkpOwogICAgIGlmIChkaXJlY3Rp
b24gIT0gRm9jdXNEaXJlY3Rpb25Ob25lKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCkBA
IC0zNDk0LDEwICszNDk0LDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5wdXRF
dmVudChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB1bmRlcmx5aW5nRXZlCiAgICAgaWYgKEZy
YW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpKQogICAgICAgICB2aWV3LT5kaXNhYmxlTGF5
ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCk7CiAKLSAgICBSZWZQ
dHI8VGV4dEV2ZW50PiBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlKG1fZnJhbWUuZG9jdW1lbnQo
KS0+ZG9tV2luZG93KCksIHRleHQsIGlucHV0VHlwZSk7CisgICAgUmVmPFRleHRFdmVudD4gZXZl
bnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0
ZXh0LCBpbnB1dFR5cGUpOwogICAgIGV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWlu
Z0V2ZW50KTsKIAotICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCwgSUdOT1JFX0VYQ0VQ
VElPTik7CisgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZl
bnQtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAppbmRleCAzZDU3NTg4NGE5YmE4NjA3YTc5YTdmZDQ3Yzc2ZDE3NDMyM2I5Mzg3Li4yNDM1ZGEw
MTUxMTgzYWU2ZDNmYWE5OWRlNDk3NjcxNTczYTkzYzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBrZXlFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmKTsKICAgICB2b2lkIGRl
ZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Kik7CiAKLSAgICBib29sIGFj
Y2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVudCopOworICAg
IGJvb2wgYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVt
ZW50Rm9yQWNjZXNzaWJpbGl0eShLZXlib2FyZEV2ZW50Kik7CiAKICAgICBib29sIGhhbmRsZVRl
eHRJbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCA9
IG51bGxwdHIsIFRleHRFdmVudElucHV0VHlwZSA9IFRleHRFdmVudElucHV0S2V5Ym9hcmQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAppbmRleCA5ZjkwYjAxYjE1ODU0MDhmNjYwZDdi
MWQwMGVjOTZmYzgxMmZhZGI3Li40YTEwMTUxMmQ2ODY2Mzg4NjAwZWQ3MzJmYzNjYTg0MTZmN2E0
MGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcApAQCAtNDEwLDExICs0MTAsMTEg
QEAgYm9vbCBFdmVudFNvdXJjZTo6Y2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gRXZlbnRTb3VyY2U6
OmNyZWF0ZU1lc3NhZ2VFdmVudCgpCitSZWY8TWVzc2FnZUV2ZW50PiBFdmVudFNvdXJjZTo6Y3Jl
YXRlTWVzc2FnZUV2ZW50KCkKIHsKLSAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudCA9IE1l
c3NhZ2VFdmVudDo6Y3JlYXRlKCk7CisgICAgUmVmPE1lc3NhZ2VFdmVudD4gZXZlbnQgPSBNZXNz
YWdlRXZlbnQ6OmNyZWF0ZSgpOwogICAgIGV2ZW50LT5pbml0TWVzc2FnZUV2ZW50KG1fZXZlbnRO
YW1lLmlzRW1wdHkoKSA/IGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQgOiBBdG9taWNTdHJpbmco
bV9ldmVudE5hbWUpLCBmYWxzZSwgZmFsc2UsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KFN0cmluZzo6YWRvcHQobV9kYXRhKSksIG1fZXZlbnRTdHJlYW1PcmlnaW4sIG1fbGFzdEV2ZW50
SWQsIDAsIDApOwotICAgIHJldHVybiBldmVudC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGV2ZW50
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgK
aW5kZXggZTQ5ZDY4ZTIzN2ZiOTllNjEwZTZkNmM3ZTM2YWM5ZDNhNGMyOGM2Yy4uMWQyNTQ1OGVl
M2QwYmZhZGIxMjNiMDFiZjZmOWZlZGUwMjQzZGU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3Vy
Y2UuaApAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWJvcnRDb25uZWN0aW9u
QXR0ZW1wdCgpOwogICAgIHZvaWQgcGFyc2VFdmVudFN0cmVhbSgpOwogICAgIHZvaWQgcGFyc2VF
dmVudFN0cmVhbUxpbmUodW5zaWduZWQgcG9zLCBpbnQgZmllbGRMZW5ndGgsIGludCBsaW5lTGVu
Z3RoKTsKLSAgICBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gY3JlYXRlTWVzc2FnZUV2ZW50KCk7
CisgICAgUmVmPE1lc3NhZ2VFdmVudD4gY3JlYXRlTWVzc2FnZUV2ZW50KCk7CiAKICAgICBVUkwg
bV91cmw7CiAgICAgYm9vbCBtX3dpdGhDcmVkZW50aWFsczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAppbmRleCAxZTdmZWQ3MDE3YWEyYjlkMjAxY2FkMDAxNzFjOTA2ODVjNTNkYzg0Li4zMWFj
MzFlMDJlYTIyNTlmOGUyODY3ZGE3Y2Y3NWRlN2YxNDNkOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCkBAIC0zMTg0LDE0ICszMTg0LDE0IEBAIHZvaWQgRnJhbWVWaWV3OjpzZW5kUmVz
aXplRXZlbnRJZk5lZWRlZCgpCiAgICAgYm9vbCBpc01haW5GcmFtZSA9IGZyYW1lKCkuaXNNYWlu
RnJhbWUoKTsKICAgICBib29sIGNhblNlbmRSZXNpemVFdmVudFN5bmNocm9ub3VzbHkgPSBpc01h
aW5GcmFtZSAmJiAhbV9zaG91bGRBdXRvU2l6ZTsKIAotICAgIFJlZlB0cjxFdmVudD4gcmVzaXpl
RXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgZmFsc2UsIGZh
bHNlKTsKKyAgICBSZWY8RXZlbnQ+IHJlc2l6ZUV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkucmVzaXplRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGNhblNlbmRSZXNpemVF
dmVudFN5bmNocm9ub3VzbHkpCi0gICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+ZGlzcGF0Y2hX
aW5kb3dFdmVudChyZXNpemVFdmVudC5yZWxlYXNlKCkpOworICAgICAgICBmcmFtZSgpLmRvY3Vt
ZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQocmVzaXplRXZlbnQpOwogICAgIGVsc2UgewogICAg
ICAgICAvLyBGSVhNRTogUXVldWVpbmcgdGhpcyBldmVudCBmb3IgYW4gdW5wcmVkaWN0YWJsZSB0
aW1lIGluIHRoZSBmdXR1cmUgc2VlbXMKICAgICAgICAgLy8gaW50cmluc2ljYWxseSByYWN5LiBC
eSB0aGUgdGltZSB0aGlzIHJlc2l6ZSBldmVudCBmaXJlcywgdGhlIGZyYW1lIG1pZ2h0CiAgICAg
ICAgIC8vIGJlIHJlc2l6ZWQgYWdhaW4sIHNvIHdlIGNvdWxkIGVuZCB1cCB3aXRoIHR3byByZXNp
emUgZXZlbnRzIGZvciB0aGUgc2FtZSBzaXplLgotICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCkt
PmVucXVldWVXaW5kb3dFdmVudChyZXNpemVFdmVudC5yZWxlYXNlKCkpOworICAgICAgICBmcmFt
ZSgpLmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVudChXVEY6Om1vdmUocmVzaXplRXZlbnQp
KTsKICAgICB9CiAKICAgICBpZiAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVu
ZHMoKSAmJiBpc01haW5GcmFtZSkgewpAQCAtMzM3NywxMSArMzM3NywxMSBAQCB2b2lkIEZyYW1l
Vmlldzo6dXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wg
dmVydGljYWxPdmVyZgogICAgICAgICBtX2hvcml6b250YWxPdmVyZmxvdyA9IGhvcml6b250YWxP
dmVyZmxvdzsKICAgICAgICAgbV92ZXJ0aWNhbE92ZXJmbG93ID0gdmVydGljYWxPdmVyZmxvdzsK
IAotICAgICAgICBSZWZQdHI8T3ZlcmZsb3dFdmVudD4gb3ZlcmZsb3dFdmVudCA9IE92ZXJmbG93
RXZlbnQ6OmNyZWF0ZShob3Jpem9udGFsT3ZlcmZsb3dDaGFuZ2VkLCBob3Jpem9udGFsT3ZlcmZs
b3csCisgICAgICAgIFJlZjxPdmVyZmxvd0V2ZW50PiBvdmVyZmxvd0V2ZW50ID0gT3ZlcmZsb3dF
dmVudDo6Y3JlYXRlKGhvcml6b250YWxPdmVyZmxvd0NoYW5nZWQsIGhvcml6b250YWxPdmVyZmxv
dywKICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmZsb3dDaGFuZ2VkLCB2ZXJ0aWNhbE92ZXJmbG93
KTsKICAgICAgICAgb3ZlcmZsb3dFdmVudC0+c2V0VGFyZ2V0KHZpZXdwb3J0UmVuZGVyZXItPmVs
ZW1lbnQoKSk7CiAKLSAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1ZXVlT3ZlcmZsb3dF
dmVudChvdmVyZmxvd0V2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGZyYW1lKCkuZG9jdW1lbnQo
KS0+ZW5xdWV1ZU92ZXJmbG93RXZlbnQoV1RGOjptb3ZlKG92ZXJmbG93RXZlbnQpKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDkzYzcw
NmMwNzA0NWJiNmJiOWU1NGM4OTVjNjVkMDM2OTYxZjVkZDYuLmM2MWNjOGI2N2QzMmViM2YyNDZj
YmY1ZjEwY2E5Yzk3NmZmOGQ3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcApAQCAtMTY5LDkgKzE2OSw5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFob3Jpem9u
dGFsTGF5b3V0T3ZlcmZsb3dDaGFuZ2VkICYmICF2ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hhbmdl
ZCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQdHI8T3ZlcmZsb3dFdmVudD4g
b3ZlcmZsb3dFdmVudCA9IE92ZXJmbG93RXZlbnQ6OmNyZWF0ZShob3Jpem9udGFsTGF5b3V0T3Zl
cmZsb3dDaGFuZ2VkLCBoYXNIb3Jpem9udGFsTGF5b3V0T3ZlcmZsb3csIHZlcnRpY2FsTGF5b3V0
T3ZlcmZsb3dDaGFuZ2VkLCBoYXNWZXJ0aWNhbExheW91dE92ZXJmbG93KTsKKyAgICAgICAgUmVm
PE92ZXJmbG93RXZlbnQ+IG92ZXJmbG93RXZlbnQgPSBPdmVyZmxvd0V2ZW50OjpjcmVhdGUoaG9y
aXpvbnRhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzSG9yaXpvbnRhbExheW91dE92ZXJmbG93
LCB2ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzVmVydGljYWxMYXlvdXRPdmVyZmxv
dyk7CiAgICAgICAgIG92ZXJmbG93RXZlbnQtPnNldFRhcmdldChtX2Jsb2NrLT5lbGVtZW50KCkp
OwotICAgICAgICBtX2Jsb2NrLT5kb2N1bWVudCgpLmVucXVldWVPdmVyZmxvd0V2ZW50KG92ZXJm
bG93RXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgbV9ibG9jay0+ZG9jdW1lbnQoKS5lbnF1ZXVl
T3ZlcmZsb3dFdmVudChXVEY6Om1vdmUob3ZlcmZsb3dFdmVudCkpOwogICAgIH0KIAogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCmluZGV4IDA3
MjEwNzY5ZmQwNmJhOWNlODdhYzQ2NTJjOTllMmMxNzhkMjg0ZjEuLjdlYjU4YTI2YTQ4ZmY3MGVm
ZjllNWY1NTNkNTZlNDA4ZmIxZjIyYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJFdmVudFF1ZXVlLmNwcApAQCAtNDksOCArNDksOCBAQCBXb3JrZXJFdmVudFF1ZXVlOjp+V29y
a2VyRXZlbnRRdWV1ZSgpCiBjbGFzcyBXb3JrZXJFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXIK
IHsKIHB1YmxpYzoKLSAgICBFdmVudERpc3BhdGNoZXIoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQs
IFdvcmtlckV2ZW50UXVldWUmIGV2ZW50UXVldWUpCi0gICAgICAgIDogbV9ldmVudChldmVudCkK
KyAgICBFdmVudERpc3BhdGNoZXIoUmVmUHRyPEV2ZW50PiYmIGV2ZW50LCBXb3JrZXJFdmVudFF1
ZXVlJiBldmVudFF1ZXVlKQorICAgICAgICA6IG1fZXZlbnQoV1RGOjptb3ZlKGV2ZW50KSkKICAg
ICAgICAgLCBtX2V2ZW50UXVldWUoZXZlbnRRdWV1ZSkKICAgICAgICAgLCBtX2lzQ2FuY2VsbGVk
KGZhbHNlKQogICAgIHsKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgICAgICBpZiAobV9p
c0NhbmNlbGxlZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9ldmVudFF1ZXVlLm1f
ZXZlbnREaXNwYXRjaGVyTWFwLnJlbW92ZShtX2V2ZW50LmdldCgpKTsKLSAgICAgICAgbV9ldmVu
dC0+dGFyZ2V0KCktPmRpc3BhdGNoRXZlbnQobV9ldmVudCk7CisgICAgICAgIG1fZXZlbnQtPnRh
cmdldCgpLT5kaXNwYXRjaEV2ZW50KCptX2V2ZW50KTsKICAgICAgICAgbV9ldmVudCA9IG51bGxw
dHI7CiAgICAgfQogCkBAIC04MywxMyArODMsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXND
YW5jZWxsZWQ7CiB9OwogCi1ib29sIFdvcmtlckV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgV29ya2VyRXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50
KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBpZiAobV9pc0Nsb3NlZCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgRXZlbnREaXNwYXRjaGVyKiBldmVudERpc3BhdGNoZXJQdHIgPSBu
ZXcgRXZlbnREaXNwYXRjaGVyKGV2ZW50LmdldCgpLCAqdGhpcyk7Ci0gICAgbV9ldmVudERpc3Bh
dGNoZXJNYXAuYWRkKGV2ZW50LCBldmVudERpc3BhdGNoZXJQdHIpOworICAgIEV2ZW50RGlzcGF0
Y2hlciogZXZlbnREaXNwYXRjaGVyUHRyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcihldmVudC5jb3B5
UmVmKCksICp0aGlzKTsKKyAgICBtX2V2ZW50RGlzcGF0Y2hlck1hcC5hZGQoZXZlbnQucHRyKCks
IGV2ZW50RGlzcGF0Y2hlclB0cik7CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnBvc3RU
YXNrKFtldmVudERpc3BhdGNoZXJQdHJdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewogICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnREaXNwYXRjaGVyPiBldmVudERpc3BhdGNoZXIoZXZl
bnREaXNwYXRjaGVyUHRyKTsKICAgICAgICAgZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRjaCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmggYi9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuaAppbmRleCA5YTA1NzU2ODEx
OTI5MjMwYjRiZWU1NzgwZGVjODQxOWQ1NWEyNDdlLi4zZGJmMzNkYjM4YjdjNzkzMzE4ZGJiZjFl
NDg0OTRmMDQyNmVjYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckV2ZW50UXVldWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVl
dWUuaApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgV29ya2VyRXZlbnRR
dWV1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAgICAgdmlydHVhbCB+V29ya2VyRXZlbnRR
dWV1ZSgpOwogCi0gICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50
Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBjYW5jZWxFdmVudChFdmVudCYpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNw
cAppbmRleCBhYjE3MDhmZTQ0MjVkMDFmNjUxNTgzOTMzNTQ3ZDljOWM3ZGI2ZTFkLi5jM2UxNTM4
YjQyNmNlMzU2NThjMDhiMzEyZDhmYzkxOTA1OTkwYTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAK
QEAgLTgxLDI1ICs4MSwyNCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90
dGxlOjpkaXNwYXRjaFRocm90dGxlZFByb2dyZXNzRXZlbnQoYm9vbCBsZQogICAgIG1faGFzVGhy
b3R0bGVkUHJvZ3Jlc3NFdmVudCA9IHRydWU7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KFJlZlB0cjxF
dmVudD4mJiBldmVudCwgUHJvZ3Jlc3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2ZW50QWN0aW9uKQor
dm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hSZWFkeVN0
YXRlQ2hhbmdlRXZlbnQoRXZlbnQmIGV2ZW50LCBQcm9ncmVzc0V2ZW50QWN0aW9uIHByb2dyZXNz
RXZlbnRBY3Rpb24pCiB7CiAgICAgaWYgKHByb2dyZXNzRXZlbnRBY3Rpb24gPT0gRmx1c2hQcm9n
cmVzc0V2ZW50KQogICAgICAgICBmbHVzaFByb2dyZXNzRXZlbnQoKTsKIAotICAgIGRpc3BhdGNo
RXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CisgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAK
LXZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQo
UmVmUHRyPEV2ZW50PiYmIGV2ZW50KQordm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGV2ZW50
KTsKICAgICBpZiAobV9kZWZlckV2ZW50cykgewotICAgICAgICBpZiAobV9kZWZlcnJlZEV2ZW50
cy5zaXplKCkgPiAxICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnJlYWR5c3RhdGVj
aGFuZ2VFdmVudCAmJiBldmVudC0+dHlwZSgpID09IG1fZGVmZXJyZWRFdmVudHMubGFzdCgpLT50
eXBlKCkpIHsKKyAgICAgICAgaWYgKG1fZGVmZXJyZWRFdmVudHMuc2l6ZSgpID4gMSAmJiBldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCAmJiBldmVudC50
eXBlKCkgPT0gbV9kZWZlcnJlZEV2ZW50cy5sYXN0KCktPnR5cGUoKSkgewogICAgICAgICAgICAg
Ly8gUmVhZHlzdGF0ZWNoYW5nZSBldmVudHMgYXJlIHN0YXRlLWxlc3Mgc28gYXZvaWQgcmVwZWF0
aW5nIHR3byBpZGVudGljYWwgZXZlbnRzIGluIGEgcm93IG9uIHJlc3VtZS4KICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2RlZmVycmVkRXZlbnRzLmFwcGVuZChXVEY6
Om1vdmUoZXZlbnQpKTsKKyAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOwog
ICAgIH0gZWxzZQotICAgICAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChXVEY6Om1vdmUoZXZl
bnQpKTsKKyAgICAgICAgbV90YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiB2b2lk
IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQpAQCAtMTIwLDggKzExOSw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZsdXNoUHJvZ3Jlc3NFdmVudCgpCiB7
CiAgICAgaWYgKG1fZGVmZXJFdmVudHMgJiYgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpIHsKICAg
ICAgICAgLy8gTW92ZSB0aGUgcHJvZ3Jlc3MgZXZlbnQgdG8gdGhlIHF1ZXVlLCB0byBnZXQgaXQg
aW4gdGhlIHJpZ2h0IG9yZGVyIG9uIHJlc3VtZS4KLSAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5h
cHBlbmQobV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpOwotICAgICAgICBtX2RlZmVycmVkUHJvZ3Jl
c3NFdmVudCA9IG51bGxwdHI7CisgICAgICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKG1fZGVm
ZXJyZWRQcm9ncmVzc0V2ZW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xNDQsMTYgKzE0MiwxNSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudFRocm90dGxlOjpkaXNwYXRjaERlZmVycmVkRXZlbnRzKCkKICAgICAvLyBUYWtlIG92ZXIg
dGhlIGRlZmVycmVkIGV2ZW50cyBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlbSB3aGljaCBjYW4gcG90
ZW50aWFsbHkgYWRkIG1vcmUuCiAgICAgYXV0byBkZWZlcnJlZEV2ZW50cyA9IFdURjo6bW92ZSht
X2RlZmVycmVkRXZlbnRzKTsKIAotICAgIFJlZlB0cjxFdmVudD4gZGVmZXJyZWRQcm9ncmVzc0V2
ZW50ID0gbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQ7Ci0gICAgbV9kZWZlcnJlZFByb2dyZXNzRXZl
bnQgPSBudWxscHRyOworICAgIFJlZlB0cjxFdmVudD4gZGVmZXJyZWRQcm9ncmVzc0V2ZW50ID0g
V1RGOjptb3ZlKG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50KTsKIAogICAgIGZvciAoYXV0byYgZGVm
ZXJyZWRFdmVudCA6IGRlZmVycmVkRXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGRlZmVy
cmVkRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChkZWZlcnJlZEV2ZW50
KTsKIAogICAgIC8vIFRoZSBwcm9ncmVzcyBldmVudCB3aWxsIGJlIGluIHRoZSBtX2RlZmVycmVk
RXZlbnRzIHZlY3RvciBpZiB0aGUgbG9hZCB3YXMgZmluaXNoZWQgd2hpbGUgc3VzcGVuZGVkLgog
ICAgIC8vIElmIG5vdCwganVzdCBzZW5kIHRoZSBtb3N0IHVwLXRvLWRhdGUgcHJvZ3Jlc3Mgb24g
cmVzdW1lLgogICAgIGlmIChkZWZlcnJlZFByb2dyZXNzRXZlbnQpCi0gICAgICAgIGRpc3BhdGNo
RXZlbnQoV1RGOjptb3ZlKGRlZmVycmVkUHJvZ3Jlc3NFdmVudCkpOworICAgICAgICBkaXNwYXRj
aEV2ZW50KCpkZWZlcnJlZFByb2dyZXNzRXZlbnQpOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmaXJlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCmluZGV4IDI5ZjRk
NjU1ZDgzZDE2ZjYxNzBmZDU1ODc1NmQ1YTc2MTk1MDRmMDIuLmMxMDA5ZTUwZGI5MDhjYTQzM2Nl
NDVkZjUzZmU1MDc0ZWZhNzc2MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCkBAIC00OSw3ICs0OSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRs
ZSgpOwogCiAgICAgdm9pZCBkaXNwYXRjaFRocm90dGxlZFByb2dyZXNzRXZlbnQoYm9vbCBsZW5n
dGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25nIGxv
bmcgdG90YWwpOwotICAgIHZvaWQgZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoUmVmUHRy
PEV2ZW50PiYmLCBQcm9ncmVzc0V2ZW50QWN0aW9uID0gRG9Ob3RGbHVzaFByb2dyZXNzRXZlbnQp
OworICAgIHZvaWQgZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoRXZlbnQmLCBQcm9ncmVz
c0V2ZW50QWN0aW9uID0gRG9Ob3RGbHVzaFByb2dyZXNzRXZlbnQpOwogICAgIHZvaWQgZGlzcGF0
Y2hQcm9ncmVzc0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgdm9pZCBzdXNwZW5k
KCk7CkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7
CiAgICAgdm9pZCBkaXNwYXRjaERlZmVycmVkRXZlbnRzKCk7CiAgICAgdm9pZCBmbHVzaFByb2dy
ZXNzRXZlbnQoKTsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnQoUmVmUHRyPEV2ZW50PiYmKTsKKyAg
ICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKTsKIAogICAgIGJvb2wgaGFzRXZlbnRUb0Rpc3Bh
dGNoKCkgY29uc3Q7CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9k
ZWZlckV2ZW50czsKICAgICBSZWZQdHI8RXZlbnQ+IG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50Owot
ICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX2RlZmVycmVkRXZlbnRzOworICAgIFZlY3RvcjxS
ZWY8RXZlbnQ+PiBtX2RlZmVycmVkRXZlbnRzOwogICAgIFRpbWVyIG1fZGlzcGF0Y2hEZWZlcnJl
ZEV2ZW50c1RpbWVyOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265325</attachid>
            <date>2015-11-11 15:59:17 -0800</date>
            <delta_ts>2015-11-11 16:06:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151158-20151111155911.patch</filename>
            <type>text/plain</type>
            <size>116793</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTI1YWNjZjRkMzZlOTdh
NzFiZDc1ZDM1OWJmNTE3MTllZTA0Y2JlOC4uMGJmMzVmYjhlODMwMTcyYWM3NTEyM2UyY2FkNTQz
M2I2YzNjMzBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFz
c1JlZlB0ciB0byBkaXNwYXRjaEV2ZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFN0b3AgcGFzc2luZyBhIFBhc3NSZWZQdHIgdG8gZGlzcGF0Y2hF
dmVudCgpIGJlY2F1c2U6CisgICAgICAgIDEuIFBhc3NSZWZQdHIgaXMgbGVnYWN5IGFuZCBzaG91
bGQgbm8gbG9uZ2VyIGJlIHVzZWQKKyAgICAgICAgMi4gV2UgZG9uJ3QgYWN0dWFsbHkgdHJhbnNm
ZXIgb3duZXJzaGlwIG9mIHRoZSBFdmVudCB0byB0aGUgY2FsbGVlCisKKyAgICAgICAgUGFzcyBh
IEMrKyByZWZlcmVuY2UgaW5zdGVhZC4KKwogMjAxNS0xMS0xMCAgSm9uIEhvbmV5Y3V0dCAgPGpo
b25leWN1dHRAYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGxvYWRpbmcgQmxpbmsgbGF5b3V0
IHRlc3QgZmFzdC9wYXJzZXIvc3RyaXAtc2NyaXB0LWF0dHJzLW9uLWlucHV0Lmh0bWwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3Bw
CmluZGV4IGNmODJhMzU1MjljZTMwODA3ZDE2OTA2OWU1ZDdhZmNiOGE0MWJkOWUuLjI1MjE1Yzk3
MDQ2Y2U5ZmUyYmZhYjFlMGI0ZDAxZDE0YWIxMzViOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcApAQCAtODQsNyArODQs
NyBAQCB2b2lkIEJhdHRlcnlDb250cm9sbGVyOjp1cGRhdGVCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQ
dHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YQogCiB2b2lkIEJhdHRlcnlDb250cm9sbGVyOjpk
aWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMpCiB7Ci0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpOworICAgIFJl
ZjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsK
ICAgICBSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeSA9IGJhdHRlcnlTdGF0dXM7CiAgICAg
Zm9yIChhdXRvJiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzKQogICAgICAgICBsaXN0ZW5lci0+ZGlk
Q2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudCwgYmF0dGVyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcAppbmRleCAzYzFlYTc3NDU2ZjRk
MmE5Njc3N2U0OWRjNjUwMTE0YTI4NjY1ZjYyLi5kNmQxODBlODU1NjBhY2QzZjdjNzljYjU1Nzc0
YTgwNDEwNzljMmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9C
YXR0ZXJ5TWFuYWdlci5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgZG91YmxlIEJhdHRlcnlNYW5hZ2Vy
OjpsZXZlbCgpCiAgICAgcmV0dXJuIG1fYmF0dGVyeVN0YXR1cyA/IG1fYmF0dGVyeVN0YXR1cy0+
bGV2ZWwoKSA6IDE7CiB9CiAKLXZvaWQgQmF0dGVyeU1hbmFnZXI6OmRpZENoYW5nZUJhdHRlcnlT
dGF0dXMoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4g
YmF0dGVyeVN0YXR1cykKK3ZvaWQgQmF0dGVyeU1hbmFnZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0
dXMoRXZlbnQmIGV2ZW50LCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMp
CiB7CiAgICAgdXBkYXRlQmF0dGVyeVN0YXR1cyhiYXR0ZXJ5U3RhdHVzKTsKICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVy
eS9CYXR0ZXJ5TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRl
cnlNYW5hZ2VyLmgKaW5kZXggNzlhMDFmOTM2OWIwNjM5ODhmNmJjMjdjNjk2OGM3NTU0ZThjZGRh
Zi4uZDRlM2QyNjE1ZTI2MTIwODQ3MDVhZDYyYjUxY2I1MzJhMDhjMjkwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUoKTsKICAgICBkb3VibGUg
bGV2ZWwoKTsKIAotICAgIHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEV2
ZW50PiwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CisgICAgdm9pZCBkaWRDaGFuZ2VCYXR0
ZXJ5U3RhdHVzKEV2ZW50JiwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CiAgICAgdm9pZCB1
cGRhdGVCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOwogICAgIHZvaWQg
YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKSB7IG1fYmF0dGVyeUNvbnRyb2xsZXIgPSBudWxs
cHRyOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkV2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGI4OGVkZTU4ZDgxZTQwNmM4MDJlNTNlOGE0MTg3
NDliZDEzMzdhOTkuLmY4MWYzNjU4MmQ3ZGJmZjUyNWU4Y2U4N2I5ZjA1NzM4MjcxYjQ4MWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0
Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnRE
aXNwYXRjaGVyLmNwcApAQCAtMzYsMzAgKzM2LDMwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50KiBldmVudCwgVmVjdG9y
PFJlZlB0cjxFdmVudFRhcmdldD4+JiBldmVudFRhcmdldHMpCitib29sIElEQkV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2goRXZlbnQmIGV2ZW50LCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4m
IGV2ZW50VGFyZ2V0cykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IGV2ZW50VGFyZ2V0cy5zaXplKCk7
CiAgICAgQVNTRVJUKHNpemUpOwogCi0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNB
UFRVUklOR19QSEFTRSk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5H
X1BIQVNFKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6ZSAtIDE7IGk7IC0taSkgeyAvLyBEb24n
dCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQo
ZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChl
dmVudFRhcmdldHNbaV0uZ2V0KCkpOwogICAgICAgICBldmVudFRhcmdldHNbaV0tPmZpcmVFdmVu
dExpc3RlbmVycyhldmVudCk7Ci0gICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVk
KCkpCisgICAgICAgIGlmIChldmVudC5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgICAg
IGdvdG8gZG9uZURpc3BhdGNoaW5nOwogICAgIH0KIAotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNl
KEV2ZW50OjpBVF9UQVJHRVQpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFy
Z2V0c1swXS5nZXQoKSk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VU
KTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1swXS5nZXQoKSk7CiAg
ICAgZXZlbnRUYXJnZXRzWzBdLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwotICAgIGlmIChl
dmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgIWV2ZW50LT5idWJibGVzKCkgfHwgZXZlbnQt
PmNhbmNlbEJ1YmJsZSgpKQorICAgIGlmIChldmVudC5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAh
ZXZlbnQuYnViYmxlcygpIHx8IGV2ZW50LmNhbmNlbEJ1YmJsZSgpKQogICAgICAgICBnb3RvIGRv
bmVEaXNwYXRjaGluZzsKIAotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElO
R19QSEFTRSk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0Up
OwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7IC8vIERvbid0IGRvIHRo
ZSBmaXJzdCBlbGVtZW50LgotICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChldmVudFRh
cmdldHNbaV0uZ2V0KCkpOworICAgICAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFy
Z2V0c1tpXS5nZXQoKSk7CiAgICAgICAgIGV2ZW50VGFyZ2V0c1tpXS0+ZmlyZUV2ZW50TGlzdGVu
ZXJzKGV2ZW50KTsKLSAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBl
dmVudC0+Y2FuY2VsQnViYmxlKCkpCisgICAgICAgIGlmIChldmVudC5wcm9wYWdhdGlvblN0b3Bw
ZWQoKSB8fCBldmVudC5jYW5jZWxCdWJibGUoKSkKICAgICAgICAgICAgIGdvdG8gZG9uZURpc3Bh
dGNoaW5nOwogICAgIH0KIApAQCAtODIsOSArODIsOSBAQCBib29sIElEQkV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2goRXZlbnQqIGV2ZW50LCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4mIGV2
ZQogICAgIC8vICAgICAgICBldmVudCBvbiB0aGUgd2luZG93IHVudGlsIHRoYXQgaGFzIGJlZW4g
aW1wbGVtZW50ZWQpLiIgLS0gSm9uYXMgU2lja2luZwogCiBkb25lRGlzcGF0Y2hpbmc6Ci0gICAg
ZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQobnVsbHB0cik7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoMCk7Ci0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIGV2ZW50
LnNldEN1cnJlbnRUYXJnZXQobnVsbHB0cik7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsK
KyAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuaAppbmRleCBhNDYzOTNlZDg2YzRhNjFlNTY5NjQ1Yzk2YzkxYzU1
MDgyNjRlZmZmLi5lZDU5NTk3NWFjYjY1YWQ2NzJmNTI4OTlhZDAyZjNhZjNmMzM1MDA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNo
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3Bh
dGNoZXIuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBFdmVudFRhcmdldDsKIAogY2xhc3MgSURC
RXZlbnREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaChFdmVu
dCosIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFu
ZCB0aGVuIGl0cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgor
ICAgIHN0YXRpYyBib29sIGRpc3BhdGNoKEV2ZW50JiwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdl
dD4+Jik7IC8vIFRoZSB0YXJnZXQgZmlyc3QgYW5kIHRoZW4gaXRzIGFuY2VzdG9ycyBpbiBvcmRl
ciBvZiBob3cgdGhlIGV2ZW50IGJ1YmJsZXMuCiAKIHByaXZhdGU6CiAgICAgSURCRXZlbnREaXNw
YXRjaGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCmluZGV4IGRiZTAwMGY1NzE0YWUyODhmMDYz
NDgyM2VjNjM1ZmYxODQ0YzgxYjMuLjYxYjE3N2M4OTg4ZmQ3NjNmZWQ4MjI0MThkMTMwZjY5OTU0
Mjc5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJEYXRhYmFzZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBJ
REJEYXRhYmFzZTo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCByZXF1ZXN0ZWRWZXJz
aW9uKQogICAgIAogICAgIFJlZjxFdmVudD4gZXZlbnQgPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6
OmNyZWF0ZShjdXJyZW50VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbiwgZXZlbnROYW1lcygpLnZl
cnNpb25jaGFuZ2VFdmVudCk7CiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoYWRvcHRSZWYo
JmV2ZW50LmxlYWtSZWYoKSkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRR
dWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZTo6ZGlkQ3JlYXRlSW5kZXhJbmZvKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVx
dWVzdEltcGwuY3BwCmluZGV4IDc1Yjk2NWQ5MGQwMTllMGY1NjhjNDNjN2ZkOGY5NWMxMWM5ZWVl
ZWMuLjk4YWVhZDVlOWQxNWZhMTZmYWE2N2FmOGIxMzI2MWZhY2UyZjlmYzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVl
c3RJbXBsLmNwcApAQCAtMTk0LDE2ICsxOTQsMTQgQEAgdm9pZCBJREJSZXF1ZXN0OjplbnF1ZXVl
RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBldmVudC0+
c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpLmVucXVldWVFdmVudCgmZXZlbnQuZ2V0KCkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAot
Ym9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50
KQorYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCAtICVzIiwgcHJwRXZlbnQt
PnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6
ZGlzcGF0Y2hFdmVudCAtICVzIiwgZXZlbnQudHlwZSgpLmNoYXJhY3RlcnM4KCkpOwogCi0gICAg
UmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkg
IT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpICE9IGV2
ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCiAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVl
c3RSZWFkeVN0YXRlOjpEb25lOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRh
cmdldHM7CkBAIC0yMTcsNyArMjE1LDcgQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgIGJvb2wgZG9udFByZXZlbnREZWZhdWx0
OwogICAgIHsKICAgICAgICAgVHJhbnNhY3Rpb25BY3RpdmF0b3IgYWN0aXZhdG9yKG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOwotICAgICAgICBkb250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKyAgICAgICAgZG9udFByZXZl
bnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudCwgdGFyZ2V0cyk7
CiAgICAgfQogCiAgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSBmYWxzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBs
LmgKaW5kZXggYTQyYjE3YjQ0M2M0MWM4M2NhOGVmOWQ2ZWQ0MDIzMzhmNDI2OTJjOC4uMjkwZTM5
YzViZDNjOTZjNjE4YzU5OGZmODQwODQwMDUzZmMwM2Y0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmgKQEAg
LTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD46
OmRlcmVmOwogCiAgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGUgZmluYWw7
CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZSBmaW5hbDsK
IAogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29u
bmVjdGlvbjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCmluZGV4IDBkYzFjNGY1OGU0
NjIyOWVjMTdiNTE1YjAxYjMxZDYyYmU0NmMwNjAuLjRhNDcxOTRjMzQ5OTkzOTBhN2M5N2JhZjQy
M2JlNGU3YTlkMTBmZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC0zNDYsNyAr
MzQ2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZmlyZU9uQWJvcnQoKQogICAgIGVucXVldWVF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxzZSkp
OwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiBldmVu
dCkKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQp
CiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpG
aW5pc2hlZCk7CiAKQEAgLTM1NCwyMiArMzU0LDIyIEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmVu
cXVldWVFdmVudChSZWY8RXZlbnQ+IGV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBldmVu
dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRR
dWV1ZSgpLmVucXVldWVFdmVudCgmZXZlbnQuZ2V0KCkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKIH0K
IAotYm9vbCBJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK2Jvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQog
ewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOwog
CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50
LT50YXJnZXQoKSA9PSB0aGlzKTsKLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50KTsKKyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJU
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFdmVu
dFRhcmdldD4+IHRhcmdldHM7CiAgICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7CiAgICAgdGFyZ2V0
cy5hcHBlbmQoZGIoKSk7CiAKLSAgICByZXR1cm4gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aChldmVudC5nZXQoKSwgdGFyZ2V0cyk7CisgICAgcmV0dXJuIElEQkV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogfQogCiBSZWY8SURCT2JqZWN0U3RvcmU+IElEQlRy
YW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGlu
Zm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCVHJhbnNhY3Rpb25JbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKaW5kZXggYjNkN2IzY2MzNjZkNThhYTdhNDRhMThk
MzJhNzc2OWRiNmU3ZDUxYy4uMDQzNjE5NTkwYzI2NzE0MWEwNzczNWQ1YzFkN2IxOTEwMjc2OTM3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QlRyYW5zYWN0aW9uSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyByZWYoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyBk
ZXJlZigpOyB9CiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmly
dHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlIGZpbmFs
OworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGUgZmluYWw7
CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBv
dmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgp
IGNvbnN0IG92ZXJyaWRlIGZpbmFsOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGZpcmVPbkNvbXBsZXRlKCk7CiAgICAgdm9pZCBmaXJlT25BYm9ydCgpOwotICAgIHZv
aWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxF
dmVudD4mJik7CiAKICAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEluZGV4UmVjb3JkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBl
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5jcHAKaW5kZXggYjAx
NGU2NjIxZDIwZDExM2MxYzcxNGMzMWE3MWQ5NmY4MzFmODQyZC4uZDAzZjEyOGNkMzExZWQyMjli
ZGMzNGM3YzAxZTVjZTBlMTFiNjdjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3BwCkBAIC05Miw3ICs5
Miw3IEBAIExlZ2FjeURhdGFiYXNlOjp+TGVnYWN5RGF0YWJhc2UoKQogICAgICAgICAvLyBjb25u
ZWN0aW9uIGNhbGxlZCBzZXRWZXJzaW9uLCBidXQgdGhlIGZyb250ZW5kIGNvbm5lY3Rpb24gaXMg
YmVpbmcKICAgICAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCiAgICAgICAg
IGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKQotICAgICAgICAgICAgY29udGV4
dC0+ZXZlbnRRdWV1ZSgpLmNhbmNlbEV2ZW50KCpldmVudCk7CisgICAgICAgICAgICBjb250ZXh0
LT5ldmVudFF1ZXVlKCkuY2FuY2VsRXZlbnQoZXZlbnQpOwogICAgIH0KIH0KIApAQCAtMzIxLDcg
KzMyMSw3IEBAIHZvaWQgTGVnYWN5RGF0YWJhc2U6OmNsb3NlQ29ubmVjdGlvbigpCiAgICAgLy8g
Y29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9udGVuZCBjb25uZWN0aW9u
IGlzIGJlaW5nCiAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCiAgICAgZm9y
IChhdXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKLSAgICAgICAgYm9vbCByZW1vdmVk
ID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOworICAgICAgICBib29sIHJlbW92ZWQg
PSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZW1vdmVkLCByZW1vdmVkKTsKICAgICB9CiAKQEAgLTM0MSwyNSArMzQxLDI1IEBAIHZvaWQgTGVn
YWN5RGF0YWJhc2U6Om9uVmVyc2lvbkNoYW5nZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRf
dCBuZXdWZXJzaW9uKQogICAgIGVucXVldWVFdmVudChMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQ6
OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5n
ZUV2ZW50KSk7CiB9CiAKLXZvaWQgTGVnYWN5RGF0YWJhc2U6OmVucXVldWVFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OmVucXVldWVFdmVudChSZWY8
RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKICAgICBB
U1NFUlQoIW1faXNDbG9zZWQpOwogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmdldCgpKTsKLSAgICBtX2VucXVl
dWVkRXZlbnRzLmFwcGVuZChldmVudCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5l
dmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmNvcHlSZWYoKSk7CisgICAgbV9lbnF1ZXVl
ZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgTGVnYWN5RGF0YWJh
c2U6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeURh
dGFiYXNlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coU3RvcmFnZUFQ
SSwgIkxlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNTRVJUKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7CisgICAgQVNTRVJUKGV2
ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50KTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0KCkpCisgICAgICAg
IGlmIChtX2VucXVldWVkRXZlbnRzW2ldLnB0cigpID09ICZldmVudCkKICAgICAgICAgICAgIG1f
ZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwogICAgIH0KLSAgICByZXR1cm4gRXZlbnRUYXJnZXQ6
OmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIHJldHVybiBFdmVudFRhcmdldDo6ZGlz
cGF0Y2hFdmVudChldmVudCk7CiB9CiAKIGludDY0X3QgTGVnYWN5RGF0YWJhc2U6OmZpbmRPYmpl
Y3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKaW5kZXgg
MTEzN2U1ZTMwMDI0NDE4MWUyMThlNDlmM2Q1N2JiN2NkNThlNjc3ZC4uZWExZWI1ZjIzZGEwZjU2
NmQ5NjMzNjhhNjhiYzMxYWY0NGZkYjI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKQEAgLTg0LDEwICs4
NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Nsb3NlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fY2xvc2VQZW5kaW5nOyB9CiAgICAgdm9pZCBmb3JjZUNsb3NlKCk7CiAgICAgY29uc3QgSURC
RGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0K
LSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBlbnF1
ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJy
aWRlOwogCiAgICAgaW50NjRfdCBmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0CkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEtlZXAgdHJhY2sg
b2YgdGhlIHZlcnNpb25jaGFuZ2UgZXZlbnRzIHdhaXRpbmcgdG8gYmUgZmlyZWQgb24gdGhpcwog
ICAgIC8vIGRhdGFiYXNlIHNvIHRoYXQgd2UgY2FuIGNhbmNlbCB0aGVtIGlmIHRoZSBkYXRhYmFz
ZSBjbG9zZXMuCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7Cisg
ICAgVmVjdG9yPFJlZjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7CiAKICAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVl
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9w
ZW5EQlJlcXVlc3QuY3BwCmluZGV4IDMyOTBjNTBmMDQyZTkwZWYyZWFiYTcyNzU4MGU3MjM5MzQ4
MjY1NmQuLjcyMTdiYzNlNGRhNzJiYzZiNGM3NmVlZDk1YWY3NzE1YzQ2MWFkNmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJS
ZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKQEAgLTEzOCwxMSArMTM4LDExIEBAIGJvb2wgTGVnYWN5
T3BlbkRCUmVxdWVzdDo6c2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3QKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KEV2ZW50JiBldmVudCkKIHsKICAgICAvLyBJZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgYmV0d2Vl
biBvblVwZ3JhZGVOZWVkZWQgYW5kIHRoZSBkZWxpdmVyeSBvZiB0aGUgInN1Y2Nlc3MiIGV2ZW50
LAogICAgIC8vIGFuICJlcnJvciIgZXZlbnQgc2hvdWxkIGJlIGZpcmVkIGluc3RlYWQuCi0gICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCAmJiBtX3Jlc3Vs
dC0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCRGF0YWJhc2UgJiYgbV9yZXN1bHQtPmxlZ2Fj
eURhdGFiYXNlKCktPmlzQ2xvc2VQZW5kaW5nKCkpIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgJiYgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6
OlR5cGU6OklEQkRhdGFiYXNlICYmIG1fcmVzdWx0LT5sZWdhY3lEYXRhYmFzZSgpLT5pc0Nsb3Nl
UGVuZGluZygpKSB7CiAgICAgICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgb25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJy
b3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeU9wZW5EQlJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmgKaW5kZXggNWE1OTNiNWY2ZWFjNzBkYjdkMzAyYjA2
ZTg5Y2ViZTM4NDhkZTQ1Zi4uNjRmNjZjNDBiMDc4MzM1NjcxYTNhYjhkYjhiOWRlN2JkY2FjYmFh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeU9wZW5EQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoK
IAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwg
Ym9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZSBmaW5hbDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJyaWRlIGZpbmFsOwogCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEVucXVldWVFdmVudCgpIGNvbnN0IG92
ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCmluZGV4IGEzYzIwMjBiMDAwYjczNGVkNmNhN2EzM2Vl
Mzk2ZWQ4OGE4ZWU1MWMuLjJjNzQ3YTU2YWFhZDUzY2Y3ZDRkM2EzZGQwODRmOGQ1ZjMyYTlhZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdh
Y3lSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5UmVxdWVzdC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIExlZ2FjeVJlcXVl
c3Q6OmFib3J0KCkKIAogICAgIEV2ZW50UXVldWUmIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1
ZXVlZEV2ZW50cykgewotICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2
ZW50KCpldmVudCk7CisgICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZl
bnQoZXZlbnQpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogICAg
IH0KICAgICBtX2VucXVldWVkRXZlbnRzLmNsZWFyKCk7CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9p
ZCBMZWdhY3lSZXF1ZXN0OjpvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IpCiAgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZl
bnQsIHRydWUsIHRydWUpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZVN1
Y2Nlc3NFdmVudCgpCitzdGF0aWMgUmVmPEV2ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQogewog
ICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNl
LCBmYWxzZSk7CiB9CkBAIC00NjYsNyArNDY2LDcgQEAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgTGVn
YWN5UmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogICAgIHJldHVybiBJREJS
ZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCi1ib29sIExlZ2FjeVJlcXVlc3Q6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeVJlcXVl
c3Q6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIExPRyhTdG9yYWdlQVBJLCAi
TGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCIpOwogICAgIEFTU0VSVChtX3JlYWR5U3RhdGUg
PT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRpbmcpOwpAQCAtNDc0LDE2ICs0NzQsMTYgQEAg
Ym9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQogICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CiAgICAgQVNTRVJUKG1fZW5xdWV1
ZWRFdmVudHMuc2l6ZSgpKTsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
LSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpID09IHRoaXMpOwotICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UobV9yZWFkeVN0YXRlIDwgSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUsICJXaGVuIGRp
c3BhdGNoaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgPCBET05FKCVkKSwgd2FzICVkIiwgZXZl
bnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KElEQlJl
cXVlc3RSZWFkeVN0YXRlOjpEb25lKSwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5U3RhdGUpKTsK
KyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX3JlYWR5U3RhdGUgPCBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSwgIldoZW4gZGlz
cGF0Y2hpbmcgZXZlbnQgJXMsIG1fcmVhZHlTdGF0ZSA8IERPTkUoJWQpLCB3YXMgJWQiLCBldmVu
dC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihJREJSZXF1
ZXN0UmVhZHlTdGF0ZTo6RG9uZSksIHN0YXRpY19jYXN0PGludD4obV9yZWFkeVN0YXRlKSk7CiAK
ICAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsKIAotICAg
IGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgaWYg
KGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQogICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
bV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVudC5nZXQoKSkKKyAgICAgICAgaWYgKG1f
ZW5xdWV1ZWRFdmVudHNbaV0ucHRyKCkgPT0gJmV2ZW50KQogICAgICAgICAgICAgbV9lbnF1ZXVl
ZEV2ZW50cy5yZW1vdmUoaSk7CiAgICAgfQogCkBAIC01MDAsNyArNTAwLDcgQEAgYm9vbCBMZWdh
Y3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAg
Ly8gQ3Vyc29yIHByb3BlcnRpZXMgc2hvdWxkIG5vdCB1cGRhdGVkIHVudGlsIHRoZSBzdWNjZXNz
IGV2ZW50IGlzIGJlaW5nIGRpc3BhdGNoZWQuCiAgICAgUmVmUHRyPExlZ2FjeUN1cnNvcj4gY3Vy
c29yVG9Ob3RpZnk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NF
dmVudCkgewogICAgICAgICBjdXJzb3JUb05vdGlmeSA9IGdldFJlc3VsdEN1cnNvcigpOwogICAg
ICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpIHsKICAgICAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5z
ZXRWYWx1ZVJlYWR5KHJlcXVlc3RTdGF0ZSgpLCBtX2N1cnNvcktleS5yZWxlYXNlKCksIG1fY3Vy
c29yUHJpbWFyeUtleS5yZWxlYXNlKCksIG1fY3Vyc29yVmFsdWUpOwpAQCAtNTA4LDE5ICs1MDgs
MTkgQEAgYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50KQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkgewogICAgICAgICBBU1NFUlQoIW1fZGlk
RmlyZVVwZ3JhZGVOZWVkZWRFdmVudCk7CiAgICAgICAgIG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRF
dmVudCA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9t
IGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCi0g
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgfHwgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50LCAiZXZlbnQgdHlwZSB3YXMgJXMi
LCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGNvbnN0IGJvb2wg
c2V0VHJhbnNhY3Rpb25BY3RpdmUgPSBtX3RyYW5zYWN0aW9uICYmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkudXBncmFkZW5lZWRlZEV2ZW50IHx8IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50ICYmIG1fZXJyb3JDb2RlICE9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVy
cm9yKSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShldmVudC50eXBlKCkgPT0gZXZlbnROYW1l
cygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZl
bnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgfHwgZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQsICJldmVudCB0eXBlIHdh
cyAlcyIsIGV2ZW50LnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBjb25zdCBi
b29sIHNldFRyYW5zYWN0aW9uQWN0aXZlID0gbV90cmFuc2FjdGlvbiAmJiAoZXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQgfHwgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
ZXJyb3JFdmVudCAmJiBtX2Vycm9yQ29kZSAhPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRF
cnJvcikpOwogCiAgICAgaWYgKHNldFRyYW5zYWN0aW9uQWN0aXZlKQogICAgICAgICBtX3RyYW5z
YWN0aW9uLT5zZXRBY3RpdmUodHJ1ZSk7CiAKLSAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdCA9
IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAg
IGJvb2wgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChl
dmVudCwgdGFyZ2V0cyk7CiAKICAgICBpZiAobV90cmFuc2FjdGlvbikgewogICAgICAgICBpZiAo
bV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKQpAQCAtNTI4LDcgKzUy
OCw3IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKIAogICAgICAgICAvLyBQb3NzaWJseSBhYm9ydCB0aGUgdHJhbnNhY3Rpb24uIFRo
aXMgbXVzdCBvY2N1ciBhZnRlciB1bnJlZ2lzdGVyaW5nIChzbyB0aGlzIHJlcXVlc3QKICAgICAg
ICAgLy8gZG9lc24ndCByZWNlaXZlIGEgc2Vjb25kIGVycm9yKSBhbmQgYmVmb3JlIGRlYWN0aXZh
dGluZyAod2hpY2ggbWlnaHQgdHJpZ2dlciBjb21taXQpLgotICAgICAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBkb250UHJldmVudERlZmF1bHQgJiYg
IW1fcmVxdWVzdEFib3J0ZWQpIHsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuZXJyb3JFdmVudCAmJiBkb250UHJldmVudERlZmF1bHQgJiYgIW1fcmVxdWVzdEFib3J0
ZWQpIHsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEVycm9yKG1fZXJyb3IsIG1fZXJy
b3JNZXNzYWdlKTsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENF
UFRJT04pOwogICAgICAgICB9CkBAIC01NDEsNyArNTQxLDcgQEAgYm9vbCBMZWdhY3lSZXF1ZXN0
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIGlmIChjdXJzb3JU
b05vdGlmeSkKICAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnBvc3RTdWNjZXNzSGFuZGxlckNhbGxi
YWNrKCk7CiAKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpE
b25lICYmICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JGaW5pc2hlZCkgJiYgZXZlbnQtPnR5
cGUoKSAhPSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KQorICAgIGlmIChtX3JlYWR5
U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUgJiYgKCFjdXJzb3JUb05vdGlmeSB8
fCBtX2N1cnNvckZpbmlzaGVkKSAmJiBldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLnVwZ3Jh
ZGVuZWVkZWRFdmVudCkKICAgICAgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSBmYWxzZTsKIAog
ICAgIHJldHVybiBkb250UHJldmVudERlZmF1bHQ7CkBAIC01NjUsNyArNTY1LDcgQEAgdm9pZCBM
ZWdhY3lSZXF1ZXN0Ojp0cmFuc2FjdGlvbkRpZEZpbmlzaEFuZERpc3BhdGNoKCkKICAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZzsKIH0KIAotdm9pZCBMZWdh
Y3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIExl
Z2FjeVJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZyB8fCBtX3Jl
YWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpOwogCkBAIC01NzYsOCArNTc2
LDggQEAgdm9pZCBMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCiAKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwogCi0gICAgaWYgKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5nZXQoKSkp
Ci0gICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKKyAgICBpZiAoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmNvcHlS
ZWYoKSkpCisgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaAppbmRleCA1YWVmYjEx
ZDIyODJjNzc4MWZhNmY5ZDY4NjdlNjg4NTZmNTc5ODMxLi5lYjFmYmFlZjJhZTYyNjVlMzIxN2Ji
YWNlNWYxYzA3ZTVmZDFiY2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmgKQEAgLTkyLDcgKzkyLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkg
b3ZlcnJpZGUgZmluYWw7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsK
LSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgdHJhbnNhY3Rpb25EaWRGaW5pc2hBbmREaXNwYXRjaCgpOwogCkBAIC0xMDgsNyAr
MTA4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgTGVnYWN5UmVxdWVzdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IHNvdXJjZSwgSURCRGF0YWJh
c2VCYWNrZW5kOjpUYXNrVHlwZSwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKLSAgICB2b2lkIGVucXVl
dWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2
ZW50PiYmKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3Q7CiAg
ICAgdm9pZCBvblN1Y2Nlc3NJbnRlcm5hbChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4pOwogICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKIAogICAgIGJvb2wgbV9oYXNQZW5kaW5n
QWN0aXZpdHk7Ci0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7Cisg
ICAgVmVjdG9yPFJlZjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7CiAKICAgICAvLyBPbmx5IHVz
ZWQgaWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJzb3IuCiAgICAgSW5kZXhlZERCOjpD
dXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uY3BwCmluZGV4IGYw
YjM0YTBkZTgyNjU4ODhjMGE0ZDM4YTYxYWVlMTlkYjY0Y2I3YjEuLmNlODQ5ZmQzZjc2NGE0NWZl
ODAxY2FkZTIxMDZkZWQwMTVlM2I0ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNwcApAQCAt
MzA2LDEzICszMDYsMTMgQEAgYm9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2
aXR5KCkgY29uc3QKICAgICByZXR1cm4gbV9oYXNQZW5kaW5nQWN0aXZpdHkgJiYgIW1fY29udGV4
dFN0b3BwZWQ7CiB9CiAKLWJvb2wgTGVnYWN5VHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2
ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVRyYW5zYWN0
aW9uOjpkaXNwYXRjaEV2ZW50Iik7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gRmluaXNoZWQpOwog
ICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsKKyAg
ICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7CiAgICAgbV9zdGF0ZSA9IEZpbmlzaGVk
OwogCiAgICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KQEAgLTMyOCw4ICszMjgsOCBAQCBi
b29sIExlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQogICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOwogCiAgICAgLy8gRklYTUU6IFdoZW4gd2Ug
YWxsb3cgY3VzdG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0
byBjaGFuZ2UuCi0gICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBs
ZXRlRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7Ci0g
ICAgYm9vbCByZXR1cm5WYWx1ZSA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQu
Z2V0KCksIHRhcmdldHMpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50
KTsKKyAgICBib29sIHJldHVyblZhbHVlID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChl
dmVudCwgdGFyZ2V0cyk7CiAgICAgLy8gRklYTUU6IFRyeSB0byBjb25zdHJ1Y3QgYSB0ZXN0IHdo
ZXJlIHx0aGlzfCBvdXRsaXZlcyBvcGVuREJSZXF1ZXN0IGFuZCB3ZQogICAgIC8vIGdldCBhIGNy
YXNoLgogICAgIGlmIChtX29wZW5EQlJlcXVlc3QpIHsKQEAgLTM1OSwxNCArMzU5LDE0IEBAIGNv
bnN0IGNoYXIqIExlZ2FjeVRyYW5zYWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QK
ICAgICByZXR1cm4gIkxlZ2FjeVRyYW5zYWN0aW9uIjsKIH0KIAotdm9pZCBMZWdhY3lUcmFuc2Fj
dGlvbjo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBMZWdhY3lU
cmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fc3RhdGUgIT0gRmluaXNoZWQsICJBIGZpbmlzaGVkIHRyYW5zYWN0
aW9uIHRyaWVkIHRvIGVucXVldWUgYW4gZXZlbnQgb2YgdHlwZSAlcy4iLCBldmVudC0+dHlwZSgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGV2ZW50LT5z
ZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVl
KCkuZW5xdWV1ZUV2ZW50KGV2ZW50KTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2
ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKIElEQkRhdGFi
YXNlQmFja2VuZCogTGVnYWN5VHJhbnNhY3Rpb246OmJhY2tlbmREQigpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNh
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lU
cmFuc2FjdGlvbi5oCmluZGV4IDgzYjc5NzExNWU3OWI3ZWYxYmNjYzVhYTQwMzcwZTIzNzVhZTk0
MjIuLmY3OWRlYzMzMzk1ZGEyYTViZDY2MzNhNjIzYzgzYTNmOTcwNzU1NGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lU
cmFuc2FjdGlvbi5oCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZSBmaW5hbCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsgfQogCiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVh
bCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlIGZpbmFsOwor
ICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGUgZmluYWw7CiAK
ICAgICAvLyBBY3RpdmVET01PYmplY3QKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2
aXR5KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBMZWdhY3lUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
aW50NjRfdCwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZSwgTGVnYWN5RGF0YWJhc2UqLCBMZWdhY3lPcGVuREJSZXF1ZXN0KiwgY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSYpOwogCi0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4p
OworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAgICAgdm9pZCBjbG9zZU9w
ZW5DdXJzb3JzKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihMZWdhY3lDdXJzb3Iq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bS5jcHAKaW5kZXggYzNjYzM4MWE4OGEwMmE4ODI3MWZkYjdkNDI1NTFhMDNlZGM1MTc4Yi4uZDVm
YmRiZmIwZjYzYjk0ZmI4YTUyNjk0MWFhMzM4OTkxZDE0NWZkMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKQEAgLTMwMyw3ICsz
MDMsNyBAQCB2b2lkIE1lZGlhU3RyZWFtOjphY3Rpdml0eUV2ZW50VGltZXJGaXJlZCgpCiAgICAg
ZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRBY3Rpdml0eUV2ZW50cyk7CiAKICAgICBmb3IgKGF1dG8m
IGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7
CisgICAgICAgIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIAogICAgIGV2ZW50cy5jbGVhcigpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1G
U2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNl
bmRlci5jcHAKaW5kZXggNTI3YjVkMTlkOTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4YmNkNWQ5OS4u
OWExNWNiYjAzZDIxNWI2MDk4YzcyMWU0OGZkNjYwY2M4OWU2ODNmZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC0x
NjIsNyArMTYyLDcgQEAgdm9pZCBSVENEVE1GU2VuZGVyOjpzY2hlZHVsZWRFdmVudFRpbWVyRmly
ZWQoKQogICAgIGV2ZW50cy5zd2FwKG1fc2NoZWR1bGVkRXZlbnRzKTsKIAogICAgIGZvciAoYXV0
byYgZXZlbnQgOiBldmVudHMpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgp
KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q0RhdGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
RGF0YUNoYW5uZWwuY3BwCmluZGV4IGQ3NzA4Y2EwNWJlYWQxNDE2NzdmYzg0NWE5YzMzNzZlNjQ0
ZmQzMTQuLmI2N2E2ZDkxNGQyNzk5MGU3YTMzMDA5NGEwZGUzN2MzZGQ1Zjc4YWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
Y3BwCkBAIC0zMjEsNyArMzIxLDcgQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c2NoZWR1bGVkRXZl
bnRUaW1lckZpcmVkKCkKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEV2ZW50cyk7CiAKICAg
ICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50
LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCBkZDQ2NDFlMWI4ZGEzMmRhNzE0
ZjM0NjgxMzM5NjdjNTgxYTQzZTY1Li5mZjVhYWU0NDY0NWYzNGE5NTVkZjE0M2IxOWY3YmE1ZGVl
ZmYzMzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtNzQyLDcgKzc0Miw3IEBAIHZvaWQgUlRDUGVl
ckNvbm5lY3Rpb246OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCgpCiAgICAgZXZlbnRzLnN3YXAo
bV9zY2hlZHVsZWRFdmVudHMpOwogCiAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykKLSAg
ICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRjaEV2
ZW50KCpldmVudCk7CiAKICAgICBldmVudHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5tbQppbmRleCBlNDUzMmM4YTE1ZmQ1NjI5ZDJhMTg1ODhmOTdiMTU0YTIwOGYwZGJjLi42Yzgz
ZWRjZWE1MDhlMzNiNmY2NDc2M2E3ODllYTc1MzJhNDE0ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50Lm1tCkBAIC0yNDMsOCArMjQzLDggQEAgdW5zaWduZWQgbG9uZyBsb25nIFF1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50Ojptb3ZpZVNpemUoKSBjb25zdAogdm9pZCBRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudDo6cG9zdEV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQogewogICAgIFJl
ZjxIVE1MUGx1Z0luRWxlbWVudD4gcHJvdGVjdCgqbV9wYXJlbnRFbGVtZW50KTsKLSAgICBSZWZQ
dHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVlKTsK
LSAgICBtX3BhcmVudEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIFJl
ZjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIHRydWUpOwor
ICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKICNpZiBQTEFU
Rk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9E
ZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJv
eGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwCmluZGV4IDYwNzhmMzdmYjhkM2I5
MWU0ZWE3NmI0MGYzYjI0MGNiMDJkZTEzZmIuLjY4ZWEyOTZhZjgzYTUxYzNkZTYxOGM5OTZlZDQx
MTY0NmIxOGM5NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5
L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwCkBAIC01Nyw3ICs1Nyw3
IEBAIGJvb2wgRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6aGFzTGFzdERhdGEoKQogICAgIHJl
dHVybiBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+aGFzTGFzdERhdGEoKTsKIH0KIAotUGFzc1Jl
ZlB0cjxFdmVudD4gRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKK1Jl
ZlB0cjxFdmVudD4gRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKIHsK
ICAgICByZXR1cm4gRGV2aWNlUHJveGltaXR5RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Vi
a2l0ZGV2aWNlcHJveGltaXR5RXZlbnQsIGRldmljZVByb3hpbWl0eUNsaWVudCgpLT52YWx1ZSgp
LCBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+bWluKCksIGRldmljZVByb3hpbWl0eUNsaWVudCgp
LT5tYXgoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0
eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3By
b3hpbWl0eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmgKaW5kZXggNDBkZGZiN2YyMTBjZmEw
NDFkNWQ2ZmRkYTYwZDJmMGJhMjU1YWIwNi4uODljZjA1NDlhNjQzZDM5NmFhMzA0M2Y1ZDNmYTk2
MjllMWQ5NGM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkv
RGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
cHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuaApAQCAtNDMsNyArNDMsNyBAQCBw
dWJsaWM6CiAgICAgRGV2aWNlUHJveGltaXR5Q2xpZW50KiBkZXZpY2VQcm94aW1pdHlDbGllbnQo
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCk7CisgICAgdmlydHVhbCBSZWZQdHI8RXZlbnQ+IGdl
dExhc3RFdmVudCgpOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7
CiAgICAgc3RhdGljIERldmljZVByb3hpbWl0eUNvbnRyb2xsZXIqIGZyb20oUGFnZSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCA2
NDY1ODQwMDIwZWE2NTM5ZDgwZjRiNDNjMTdhNTQyZDhkM2I3MjcxLi40MWViMTA5ZTdiZWJkOGJl
ZjFiOTZlODY0NTI2MjU1NjM5MjUxZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtNjQ4LDcgKzY0OCw3IEBAIHZvaWQgV2ViU29j
a2V0OjpkaXNwYXRjaE9yUXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiAgICAgaWYgKG1f
c2hvdWxkRGVsYXlFdmVudEZpcmluZykKICAgICAgICAgbV9wZW5kaW5nRXZlbnRzLmFwcGVuZChX
VEY6Om1vdmUoZXZlbnQpKTsKICAgICBlbHNlCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoV1RGOjpt
b3ZlKGV2ZW50KSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiB9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCmluZGV4IGRkZTEzM2Nj
N2M3MDE0NGUyZDEwMzQ0ZmE3NzIzM2M5MWYwNjVmZDQuLjk1NTk5ZTM4Y2FlYTcyZDg3OWI0MTg2
YTJjOTRhNmY5YzFhN2JiNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9h
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAKQEAgLTE4OCw3
ICsxODgsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmZpcmVQZW5kaW5nRXZlbnRzKCkKICAgICB9CiAK
ICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcGVuZGluZ0V2ZW50cy5zaXplKCk7
ICsraW5kZXgpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50c1tpbmRleF0ucmVs
ZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqcGVuZGluZ0V2ZW50c1tpbmRleF0pOwog
CiAgICAgaWYgKGxvYWRpbmdEb25lICYmICFtX2NhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgVmVjdG9yPFJlZlB0cjxWb2lkQ2FsbGJhY2s+PiBjYWxsYmFja3M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMTE1MWJkMWViYTViZTRl
OTY0OGU0ZjNhOWQwMjQ2MWRkYTM1ZGRiOC4uOTMwOTJiY2ZiN2ZkYjlmYTUxMjg3OWMzZjU0ODhh
MDQ4NjA3YzEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9s
bGVyLmNwcApAQCAtNzIsNyArNzIsNyBAQCBib29sIERldmljZU1vdGlvbkNvbnRyb2xsZXI6Omhh
c0xhc3REYXRhKCkKICAgICByZXR1cm4gZGV2aWNlTW90aW9uQ2xpZW50KCktPmxhc3RNb3Rpb24o
KTsKIH0KIAotUGFzc1JlZlB0cjxFdmVudD4gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6Z2V0TGFz
dEV2ZW50KCkKK1JlZlB0cjxFdmVudD4gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6Z2V0TGFzdEV2
ZW50KCkKIHsKICAgICByZXR1cm4gRGV2aWNlTW90aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuZGV2aWNlbW90aW9uRXZlbnQsIGRldmljZU1vdGlvbkNsaWVudCgpLT5sYXN0TW90aW9uKCkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgKaW5kZXgg
N2Q3MmQ1MTVjYzZkODEzZGMxZjM4YzYxOWU4OWUyY2RjZmQ0YjlkYS4uMTRkYzc0NGI1YjQ0YWRh
MDViM2YzZGIzYWRmODk4MWRjZjllZGEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RldmljZU1vdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNl
TW90aW9uQ29udHJvbGxlci5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBEZXZpY2VN
b3Rpb25DbGllbnQqIGRldmljZU1vdGlvbkNsaWVudCgpOwogCiAgICAgdmlydHVhbCBib29sIGhh
c0xhc3REYXRhKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRM
YXN0RXZlbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2
ZW50KCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUo
KTsKICAgICBzdGF0aWMgRGV2aWNlTW90aW9uQ29udHJvbGxlciogZnJvbShQYWdlKik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCmlu
ZGV4IGFjZTNiMmIyMjk2M2U4MTI2MzliOTA4MmNhYjg0NmQxMDE3Y2Q1MzYuLjM5NmJmOGNmNDA5
NTg0ODcxZmUwNmVhOTczYzMwZDVkNmZkOGMyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBAIGJv
b2wgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpoYXNMYXN0RGF0YSgpCiAgICAgcmV0dXJu
IGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCktPmxhc3RPcmllbnRhdGlvbigpOwogfQogCi1QYXNz
UmVmUHRyPEV2ZW50PiBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI6OmdldExhc3RFdmVudCgp
CitSZWZQdHI8RXZlbnQ+IERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50
KCkKIHsKICAgICByZXR1cm4gRGV2aWNlT3JpZW50YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5kZXZpY2VvcmllbnRhdGlvbkV2ZW50LCBkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpLT5s
YXN0T3JpZW50YXRpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3Jp
ZW50YXRpb25Db250cm9sbGVyLmgKaW5kZXggMTE4MzA2MzQ4NjllOTA2ZTU4NzczNzRiYjczYTJm
ZGU0ZThiOTI4Ny4uYjAxZjhkMWE2MmIwNDc5MmIzNWY4NDNhMmZmMDA4NTdhNTMxMTQzOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaApA
QCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXN1bWVVcGRhdGVzKCk7CiAjZWxz
ZQogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBS
ZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICBzdGF0
aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmlu
ZGV4IDhjMTBkMGU5NGMwMWI3MDc4YmQxMTIwYjY3NDQ1ZjY0NjY4YjVhOWMuLjkzZTY2ZTg0MTNi
OThjY2I3NGY5ZjM4ODJmNGQwNThjMWY0MDVmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApA
QCAtNDA1MCw3ICs0MDUwLDcgQEAgRXZlbnRMaXN0ZW5lciogRG9jdW1lbnQ6OmdldFdpbmRvd0F0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmUKICAgICByZXR1cm4g
bV9kb21XaW5kb3ctPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCwgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRG9jdW1lbnQ6OmRpc3Bh
dGNoV2luZG93RXZlbnQoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdldCogdGFyZ2V0KQogewogICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKICAgICBpZiAoIW1fZG9tV2luZG93KQpA
QCAtNDA2OCwyMSArNDA2OCwyMSBAQCB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRvd0xvYWRF
dmVudCgpCiAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnREaWRGaW5pc2hMb2Fk
RXZlbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVdpbmRvd0V2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVdpbmRvd0V2ZW50KFJlZjxF
dmVudD4mJiBldmVudCkKIHsKICAgICBldmVudC0+c2V0VGFyZ2V0KG1fZG9tV2luZG93LmdldCgp
KTsKLSAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KGV2ZW50KTsKKyAgICBtX2V2ZW50UXVl
dWUuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVudCkpOwogfQogCi12b2lkIERvY3VtZW50Ojpl
bnF1ZXVlRG9jdW1lbnRFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgRG9jdW1l
bnQ6OmVucXVldWVEb2N1bWVudEV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBldmVu
dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQp
OworICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAK
LXZvaWQgRG9jdW1lbnQ6OmVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZU92ZXJmbG93RXZlbnQoUmVmPEV2ZW50PiYmIGV2
ZW50KQogewotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQpOworICAgIG1fZXZl
bnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKIFJlZlB0cjxFdmVu
dD4gRG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTU5ODAsMjQgKzU5ODAsMjQgQEAgdm9pZCBEb2N1bWVudDo6c2VuZFdp
bGxSZXZlYWxFZGdlRXZlbnRzSWZOZWVkZWQoY29uc3QgSW50UG9pbnQmIG9sZFBvc2l0aW9uLCBj
b24KICAgICAvLyBCb3R0b20gZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueSgpID49IHdpbGxS
ZXZlYWxCb3R0b21Ob3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi55KCkgPiBvbGRQb3Np
dGlvbi55KCkKICAgICAgICAgJiYgd2lsbFJldmVhbEJvdHRvbU5vdGlmaWNhdGlvblBvaW50ID49
IG9sZFBvc2l0aW9uLnkoKSkgewotICAgICAgICBSZWZQdHI8RXZlbnQ+IHdpbGxSZXZlYWxFdmVu
dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWxib3R0b21FdmVu
dCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsYm90dG9tRXZlbnQsIGZh
bHNlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdp
bmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1
ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAg
ICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgp
KTsKKyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxS
ZXZlYWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gVG9wIGVkZ2UuCiAgICAg
aWYgKG5ld1Bvc2l0aW9uLnkoKSA8PSB3aWxsUmV2ZWFsVG9wTm90aWZpY2F0aW9uUG9pbnQgJiYg
bmV3UG9zaXRpb24ueSgpIDwgb2xkUG9zaXRpb24ueSgpCiAgICAgICAgICYmIHdpbGxSZXZlYWxU
b3BOb3RpZmljYXRpb25Qb2ludCA8PSBvbGRQb3NpdGlvbi55KCkpIHsKLSAgICAgICAgUmVmUHRy
PEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJr
aXR3aWxscmV2ZWFsdG9wRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIFJlZjxFdmVudD4g
d2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0d2lsbHJl
dmVhbHRvcEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICBpZiAoIXRhcmdldCkKLSAgICAg
ICAgICAgIGVucXVldWVXaW5kb3dFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAg
ICAgICAgICAgIGVucXVldWVXaW5kb3dFdmVudChXVEY6Om1vdmUod2lsbFJldmVhbEV2ZW50KSk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgd2lsbFJldmVhbEV2ZW50LT5zZXRUYXJnZXQo
dGFyZ2V0KTsKLSAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQod2lsbFJldmVh
bEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50
KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjAw
NywyNCArNjAwNywyNCBAQCB2b2lkIERvY3VtZW50OjpzZW5kV2lsbFJldmVhbEVkZ2VFdmVudHNJ
Zk5lZWRlZChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbgogICAgIC8vIFJpZ2h0IGVk
Z2UuCiAgICAgaWYgKG5ld1Bvc2l0aW9uLngoKSA+PSB3aWxsUmV2ZWFsUmlnaHROb3RpZmljYXRp
b25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkgPiBvbGRQb3NpdGlvbi54KCkKICAgICAgICAgJiYg
d2lsbFJldmVhbFJpZ2h0Tm90aWZpY2F0aW9uUG9pbnQgPj0gb2xkUG9zaXRpb24ueCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAg
ICAgIFJlZjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlm
ICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVu
dC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3
aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3aWxsUmV2ZWFs
RXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVl
dWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRR
dWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgLy8gTGVmdCBlZGdlLgogICAgIGlmIChuZXdQb3NpdGlvbi54KCkgPD0g
d2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkgPCBvbGRQ
b3NpdGlvbi54KCkKICAgICAgICAgJiYgd2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Qb2ludCA8
PSBvbGRQb3NpdGlvbi54KCkpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiB3aWxsUmV2ZWFsRXZl
bnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsbGVmdEV2ZW50
LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBSZWY8RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWxsZWZ0RXZlbnQsIGZhbHNl
LCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRv
d0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdp
bmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAg
ICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsK
KyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZl
YWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5k
ZXggOTc2Y2RhMWFkNzA1ZjhjZWIzODRiYmM3YWM0MGEyZmUwODAzNTViNi4uN2NhYjMxNmQ3NTUw
YzliNmU1YWNhMzhkY2MwZTNkOTVhNWI4YTRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTc4
OCw3ICs3ODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIHNl
dFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwogICAgIEV2ZW50TGlzdGVuZXIqIGdldFdp
bmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hXaW5kb3dFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gPSBudWxscHRyKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQmLCBFdmVudFRhcmdldCogPSBu
dWxscHRyKTsKICAgICB2b2lkIGRpc3BhdGNoV2luZG93TG9hZEV2ZW50KCk7CiAKICAgICBSZWZQ
dHI8RXZlbnQ+IGNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNlcHRpb25D
b2RlJik7CkBAIC0xMDkyLDkgKzEwOTIsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
Q29udGV4dFRocmVhZCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgYm9vbCBp
c0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIHZvaWQgZW5xdWV1ZVdpbmRvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsK
LSAgICB2b2lkIGVucXVldWVEb2N1bWVudEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2
b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVu
cXVldWVXaW5kb3dFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZvaWQgZW5xdWV1ZURvY3VtZW50
RXZlbnQoUmVmPEV2ZW50PiYmKTsKKyAgICB2b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50KFJlZjxF
dmVudD4mJik7CiAgICAgdm9pZCBlbnF1ZXVlUGFnZXNob3dFdmVudChQYWdlc2hvd0V2ZW50UGVy
c2lzdGVuY2UpOwogICAgIHZvaWQgZW5xdWV1ZUhhc2hjaGFuZ2VFdmVudChjb25zdCBTdHJpbmcm
IG9sZFVSTCwgY29uc3QgU3RyaW5nJiBuZXdVUkwpOwogICAgIHZvaWQgZW5xdWV1ZVBvcHN0YXRl
RXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5jcHAKaW5kZXggYTdiYjVkZmUyY2Fm
ODQ4ZDRmNWY5MmUyODFjOTczMmU0OGEyZTlmOS4uOGVhNWVjMDM3NGJkMTM3ODg3MWQyYTYyZDk0
YTliOTc4MjBiYzZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZl
bnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5j
cHAKQEAgLTY4LDE1ICs2OCwxNSBAQCBEb2N1bWVudEV2ZW50UXVldWU6On5Eb2N1bWVudEV2ZW50
UXVldWUoKQogewogfQogCi1ib29sIERvY3VtZW50RXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBEb2N1bWVudEV2ZW50UXVldWU6OmVucXVldWVF
dmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7
Ci0gICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250YWlucyhldmVudC5nZXQoKSkpOworICAg
IEFTU0VSVCghbV9xdWV1ZWRFdmVudHMuY29udGFpbnMoZXZlbnQucHRyKCkpKTsKIAogICAgIGlm
IChtX2lzQ2xvc2VkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3F1ZXVlZEV2ZW50
cy5hZGQoZXZlbnQpOworICAgIG1fcXVldWVkRXZlbnRzLmFkZChldmVudC5wdHIoKSk7CiAgICAg
aWYgKCFtX3BlbmRpbmdFdmVudFRpbWVyLT5pc0FjdGl2ZSgpKQogICAgICAgICBtX3BlbmRpbmdF
dmVudFRpbWVyLT5zdGFydE9uZVNob3QoMCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05OSw5ICs5
OSw5IEBAIHZvaWQgRG9jdW1lbnRFdmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2
ZW50KE5vZGUmIHRhcmdldCkKICAgICBib29sIGJ1YmJsZXMgPSB0YXJnZXQuaXNEb2N1bWVudE5v
ZGUoKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBmYWxzZTsKIAotICAgIFJlZlB0cjxFdmVudD4g
c2Nyb2xsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgYnVi
YmxlcywgY2FuY2VsYWJsZSk7CisgICAgUmVmPEV2ZW50PiBzY3JvbGxFdmVudCA9IEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBidWJibGVzLCBjYW5jZWxhYmxlKTsKICAg
ICBzY3JvbGxFdmVudC0+c2V0VGFyZ2V0KCZ0YXJnZXQpOwotICAgIGVucXVldWVFdmVudChzY3Jv
bGxFdmVudC5yZWxlYXNlKCkpOworICAgIGVucXVldWVFdmVudChXVEY6Om1vdmUoc2Nyb2xsRXZl
bnQpKTsKIH0KIAogYm9vbCBEb2N1bWVudEV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2ZW50JiBl
dmVudCkKQEAgLTE0Niw5ICsxNDYsOSBAQCB2b2lkIERvY3VtZW50RXZlbnRRdWV1ZTo6ZGlzcGF0
Y2hFdmVudChFdmVudCYgZXZlbnQpCiAgICAgLy8gV2h5IGRvIHdlIGhhdmUgdGhpcyBzcGVjaWFs
IGNhc2UgaGVyZSBpbnN0ZWFkIG9mIGEgdmlydHVhbCBmdW5jdGlvbiBvbiBFdmVudFRhcmdldD8K
ICAgICBFdmVudFRhcmdldCYgZXZlbnRUYXJnZXQgPSAqZXZlbnQudGFyZ2V0KCk7CiAgICAgaWYg
KERPTVdpbmRvdyogd2luZG93ID0gZXZlbnRUYXJnZXQudG9ET01XaW5kb3coKSkKLSAgICAgICAg
d2luZG93LT5kaXNwYXRjaEV2ZW50KCZldmVudCwgMCk7CisgICAgICAgIHdpbmRvdy0+ZGlzcGF0
Y2hFdmVudChldmVudCwgbnVsbHB0cik7CiAgICAgZWxzZQotICAgICAgICBldmVudFRhcmdldC5k
aXNwYXRjaEV2ZW50KCZldmVudCk7CisgICAgICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQo
ZXZlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRF
dmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmgKaW5k
ZXggOTgyNWVkMmY2MDdhNDJhODdiNTExMzNhOWI4MTVlNTVlZjIzMGVkYy4uN2QxMTFkMmQ0YjVi
YTY5YzhiM2U3YzIyZjg3NDRjZTc5Njc1M2I5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dEV2ZW50UXVldWUuaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgRG9j
dW1lbnRFdmVudFF1ZXVlKERvY3VtZW50Jik7CiAgICAgdmlydHVhbCB+RG9jdW1lbnRFdmVudFF1
ZXVlKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAppbmRleCA5OGE2MTBmZWQxYzZhOTU0ZmExNDI3NGVmOWNhZTJjZjhhNzM5ODNjLi4zZDczZGVh
NjhmZjRkMzU4Y2MxMDhiZGJmY2JhNTM3NTM4NzUzM2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogICAgIGlmIChpc0Zv
cmNlRXZlbnQocGxhdGZvcm1FdmVudCkgJiYgIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlRm9y
RXZlbnRUeXBlKHBsYXRmb3JtRXZlbnQudHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUo
ZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtRXZlbnQsIGRldGFp
bCwgcmVsYXRlZFRhcmdldCk7CisgICAgUmVmPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3Vz
ZUV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRm
b3JtRXZlbnQsIGRldGFpbCwgcmVsYXRlZFRhcmdldCk7CiAKICAgICBpZiAobW91c2VFdmVudC0+
dHlwZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFNob3VsZG4ndCBoYXBw
ZW4uCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogICAgICAgICAv
LyBTcGVjaWFsIGNhc2U6IElmIGl0J3MgYSBkb3VibGUgY2xpY2sgZXZlbnQsIHdlIGFsc28gc2Vu
ZCB0aGUgZGJsY2xpY2sgZXZlbnQuIFRoaXMgaXMgbm90IHBhcnQKICAgICAgICAgLy8gb2YgdGhl
IERPTSBzcGVjcywgYnV0IGlzIHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb25kYmxj
bGljaz0iIiBhdHRyaWJ1dGUuIFRoaXMgaXMgdHJlYXRlZAogICAgICAgICAvLyBhcyBhIHNlcGFy
YXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMgbGlrZSBGaXJlZm94LCBh
bmQgc28gd2UgZG8gdGhlIHNhbWUuCi0gICAgICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBkb3VibGVD
bGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxNb3VzZUV2ZW50
PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7CiAgICAgICAgIGRvdWJs
ZUNsaWNrRXZlbnQtPmluaXRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50LAog
ICAgICAgICAgICAgbW91c2VFdmVudC0+YnViYmxlcygpLCBtb3VzZUV2ZW50LT5jYW5jZWxhYmxl
KCksIG1vdXNlRXZlbnQtPnZpZXcoKSwgbW91c2VFdmVudC0+ZGV0YWlsKCksCiAgICAgICAgICAg
ICBtb3VzZUV2ZW50LT5zY3JlZW5YKCksIG1vdXNlRXZlbnQtPnNjcmVlblkoKSwgbW91c2VFdmVu
dC0+Y2xpZW50WCgpLCBtb3VzZUV2ZW50LT5jbGllbnRZKCksCkBAIC0yODUsNyArMjg1LDcgQEAg
Ym9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoV2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxXaGVlbEV2
ZW50PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVudDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVudCgpLmRl
ZmF1bHRWaWV3KCkpOworICAgIFJlZjxXaGVlbEV2ZW50PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVu
dDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOwogCiAgICAgLy8gRXZl
bnRzIHdpdGggbm8gZGVsdGFzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSB0aGV5IGNvbnZleSBwbGF0
Zm9ybSBpbmZvcm1hdGlvbiBhYm91dCBzY3JvbGwgZ2VzdHVyZXMKICAgICAvLyBhbmQgbW9tZW50
dW0gYmVnaW5uaW5nIG9yIGVuZGluZy4gSG93ZXZlciwgdGhvc2UgZXZlbnRzIHNob3VsZCBub3Qg
YmUgc2VudCB0byB0aGUgRE9NIHNpbmNlIHNvbWUKQEAgLTMwMCw5ICszMDAsOSBAQCBib29sIEVs
ZW1lbnQ6OmRpc3BhdGNoV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50
KQogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50JiBwbGF0Zm9ybUV2ZW50KQogewotICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBldmVu
dCA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgpLmRlZmF1
bHRWaWV3KCkpOworICAgIFJlZjxLZXlib2FyZEV2ZW50PiBldmVudCA9IEtleWJvYXJkRXZlbnQ6
OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOwogICAgIGlm
IChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGZyYW1l
LT5ldmVudEhhbmRsZXIoKS5hY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKGV2
ZW50LmdldCgpKSkKKyAgICAgICAgaWYgKGZyYW1lLT5ldmVudEhhbmRsZXIoKS5hY2Nlc3NpYmls
aXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKGV2ZW50KSkKICAgICAgICAgICAgIGV2ZW50LT5z
dG9wUHJvcGFnYXRpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hFdmVudCh0aGlzLCBldmVudCkgJiYgIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwpAQCAt
MjMyNCw3ICsyMzI0LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVn
aW4oKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxh
dGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0
aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9u
KCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5cGUsIDEsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZvcmNlQXRDbGljayk7Ci0gICAgUmVmUHRy
PE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCA9ICBNb3VzZUV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2V3aWxsYmVnaW5FdmVudCwgZG9jdW1lbnQo
KS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNlRXZlbnQsIDAsIG51bGxwdHIpOworICAgIFJl
ZjxNb3VzZUV2ZW50PiBtb3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQgPSAgTW91c2VFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNld2lsbGJlZ2luRXZlbnQsIGRvY3VtZW50
KCkuZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm1Nb3VzZUV2ZW50LCAwLCBudWxscHRyKTsKICAgICBt
b3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKICAgICBkaXNwYXRjaEV2
ZW50KG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCmluZGV4IDU5
NmRkODU4YTA0YzM2M2E3NWU0OGVhY2Y4YTc0YTVhOGQ2ZWU4NTUuLjVjMWU2ZmU3MDEyNzhjZGU1
YWU2ZTAzZWQ4NWE1ZTI3NGQ3OWEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcApAQCAtMTYyLDEyICsx
NjIsMTIgQEAgUGFzc1JlZlB0cjxFdmVudD4gRXZlbnQ6OmNsb25lRm9yKEhUTUxJRnJhbWVFbGVt
ZW50KikgY29uc3QKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZSh0eXBlKCksIGJ1YmJsZXMoKSwg
Y2FuY2VsYWJsZSgpKTsKIH0KIAotdm9pZCBFdmVudDo6c2V0VGFyZ2V0KFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRXZlbnQ6OnNldFRhcmdldChSZWZQdHI8RXZlbnRUYXJn
ZXQ+JiYgdGFyZ2V0KQogewogICAgIGlmIChtX3RhcmdldCA9PSB0YXJnZXQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OworICAgIG1fdGFyZ2V0ID0gV1RGOjptb3Zl
KHRhcmdldCk7CiAgICAgaWYgKG1fdGFyZ2V0KQogICAgICAgICByZWNlaXZlZFRhcmdldCgpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnQuaAppbmRleCAwOWU3NzhkNTEzNmZmMGZjYTg2ZTRkYzI5ZmViYWFlODljMjE3
ZjBjLi4wY2NjZTEwODg1Mzg4NTJlMzFkNGYzNDIxNmNlY2QxOGU4OTQyMzNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnQuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFR5cGUoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KICAgICAKICAgICBFdmVudFRh
cmdldCogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CisgICAgdm9pZCBzZXRUYXJnZXQo
UmVmUHRyPEV2ZW50VGFyZ2V0PiYmKTsKIAogICAgIEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0OyB9CiAgICAgdm9pZCBzZXRDdXJyZW50
VGFyZ2V0KEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0KSB7IG1fY3VycmVudFRhcmdldCA9IGN1
cnJlbnRUYXJnZXQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXgg
MmJkYzM1MGI1YTVmNzYzMzBiMmQ3ZGI3NjgyYjc2Zjg4NjUzYWEyZC4uMzQxODQ3ZmQzODAyODhm
MzAwZTBkODNiNmIwNDNkYWJlNTIxNzQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0
Y2hlci5jcHAKQEAgLTcwLDkgKzcwLDkgQEAgYm9vbCBXaW5kb3dFdmVudENvbnRleHQ6OmhhbmRs
ZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoIW1fd2luZG93KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBldmVudC5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOworICAg
IGV2ZW50LnNldFRhcmdldChtX3RhcmdldC5jb3B5UmVmKCkpOwogICAgIGV2ZW50LnNldEN1cnJl
bnRUYXJnZXQobV93aW5kb3cuZ2V0KCkpOwotICAgIG1fd2luZG93LT5maXJlRXZlbnRMaXN0ZW5l
cnMoJmV2ZW50KTsKKyAgICBtX3dpbmRvdy0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjAxLDEwICsyMDEsMTAgQEAgaW5saW5lIEV2ZW50VGFy
Z2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhOb2RlJiByZWZlcmVuY2VOb2Rl
KQogICAgIHJldHVybiAmcmVmZXJlbmNlTm9kZTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6
OmRpc3BhdGNoU2NvcGVkRXZlbnQoTm9kZSYgbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
Cit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiBub2RlLCBF
dmVudCYgZXZlbnQpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHRhcmdldCBoZXJlIGJl
Y2F1c2UgaXQgY2FuIGdvIGF3YXkgYnkgdGhlIHRpbWUgd2UgYWN0dWFsbHkgZmlyZSB0aGUgZXZl
bnQuCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxl
cyhub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rhcmdl
dFJ1bGVzKG5vZGUpKTsKICAgICBTY29wZWRFdmVudFF1ZXVlOjpzaW5nbGV0b24oKS5lbnF1ZXVl
RXZlbnQoZXZlbnQpOwogfQogCkBAIC0zMDAsMjMgKzMwMCwxOSBAQCBzdGF0aWMgdm9pZCBkaXNw
YXRjaEV2ZW50SW5ET00oRXZlbnQmIGV2ZW50LCBjb25zdCBFdmVudFBhdGgmIHBhdGgsIFdpbmRv
d0V2ZW50QwogICAgIH0KIH0KIAotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQo
Tm9kZSogb3JpZ2luLCBQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jvb2wgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG9yaWdpbiwgRXZlbnQmIGV2ZW50KQogewogICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBpZiAoIXBycEV2ZW50KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIEFTU0VSVChvcmlnaW4pOwogICAgIFJlZlB0cjxOb2Rl
PiBub2RlKG9yaWdpbik7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudChwcnBFdmVudCk7CiAgICAg
UmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IG5vZGUtPmRvY3VtZW50KCkudmlldygpOwotICAgIEV2
ZW50UGF0aCBldmVudFBhdGgoKm5vZGUsICpldmVudCk7CisgICAgRXZlbnRQYXRoIGV2ZW50UGF0
aCgqbm9kZSwgZXZlbnQpOwogCi0gICAgaWYgKEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0g
ZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKKyAgICBpZiAoRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJn
ZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0KCkpCiAgICAgICAgIGV2ZW50UGF0aC5zZXRSZWxhdGVk
VGFyZ2V0KCpub2RlLCAqcmVsYXRlZFRhcmdldCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykg
JiYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoaXM8VG91Y2hFdmVudD4oKmV2ZW50KSkgewotICAg
ICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRvd25jYXN0PFRvdWNoRXZlbnQ+
KCpldmVudCkpKQorICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkpIHsKKyAgICAgICAgaWYg
KCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cyhkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudCkp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCkBAIC0zMjQsOCArMzIw
LDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogb3JpZ2luLCBQ
YXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBDaGlsZE5vZGVzTGF6eVNuYXBzaG90Ojp0
YWtlQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCgpOwogCiAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9
IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKTsKLSAgICBldmVudC0+c2V0
VGFyZ2V0KHRhcmdldCk7Ci0gICAgaWYgKCFldmVudC0+dGFyZ2V0KCkpCisgICAgZXZlbnQuc2V0
VGFyZ2V0KHRhcmdldCk7CisgICAgaWYgKCFldmVudC50YXJnZXQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighTm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CkBAIC0zMzQsMzAg
KzMzMCwzMCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmln
aW4sIFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogCiAgICAgSW5wdXRFbGVtZW50Q2xpY2tT
dGF0ZSBjbGlja0hhbmRsaW5nU3RhdGU7CiAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpu
b2RlKSkKLSAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxEaXNw
YXRjaEV2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAgZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxEaXNwYXRjaEV2ZW50KGV2ZW50LCBjbGlja0hh
bmRsaW5nU3RhdGUpOwogCi0gICAgaWYgKCFldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYg
IWV2ZW50UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTSgqZXZlbnQs
IGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsKKyAgICBpZiAoIWV2ZW50LnByb3BhZ2F0
aW9uU3RvcHBlZCgpICYmICFldmVudFBhdGguaXNFbXB0eSgpKQorICAgICAgICBkaXNwYXRjaEV2
ZW50SW5ET00oZXZlbnQsIGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsKIAotICAgIGV2
ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsK
LSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKLSAgICBldmVudC0+c2V0RXZl
bnRQaGFzZSgwKTsKKyAgICBldmVudC5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFy
Z2V0UnVsZXMoKm5vZGUpKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOwor
ICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoMCk7CiAKICAgICBpZiAoY2xpY2tIYW5kbGluZ1N0YXRl
LnN0YXRlZnVsKQotICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkuZGlk
RGlzcGF0Y2hDbGlja0V2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAg
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLmRpZERpc3BhdGNoQ2xpY2tFdmVudChl
dmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAgIC8vIENhbGwgZGVmYXVsdCBldmVudCBo
YW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHByZXZlbnRpbmcK
ICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhhbmRsZXJzIGFy
ZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5k
IG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgp
ICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgY2FsbERlZmF1bHRFdmVudEhh
bmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKCpldmVudCwgZXZlbnRQYXRoKTsKKyAgICBpZiAoIWV2
ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZlbnQuZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAg
ICAgY2FsbERlZmF1bHRFdmVudEhhbmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKGV2ZW50LCBldmVu
dFBhdGgpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gsIHRoZSBl
dmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCiAgICAgLy8gb3V0ZXJtb3N0IHNoYWRvdyBET00g
Ym91bmRhcnkuCi0gICAgZXZlbnQtPnNldFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFyZ2V0
KCkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOworICAgIGV2ZW50LnNl
dFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFyZ2V0KCkpOworICAgIGV2ZW50LnNldEN1cnJl
bnRUYXJnZXQobnVsbHB0cik7CiAKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVk
KCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzaG91bGRFdmVudENyb3NzU2hhZG93Qm91bmRhcnkoRXZlbnQmIGV2ZW50LCBT
aGFkb3dSb290JiBzaGFkb3dSb290LCBFdmVudFRhcmdldCYgdGFyZ2V0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDY0MDQwZGQzY2M0YmU4N2JlYjYxOGMyMDljZjQ5ZjIy
YzQwNjU0ZDIuLmYxODlkN2E0ZGYyYjg1ZDI3YWY3NDVjZmFlM2FhZTQ2ODBkYTkzNTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTM4LDExICszOCwxMSBAQCBjbGFzcyBO
b2RlOwogCiBuYW1lc3BhY2UgRXZlbnREaXNwYXRjaGVyIHsKIAotYm9vbCBkaXNwYXRjaEV2ZW50
KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50Pik7Ci12b2lkIGRpc3BhdGNoU2NvcGVkRXZlbnQoTm9k
ZSYsIFBhc3NSZWZQdHI8RXZlbnQ+KTsKK2Jvb2wgZGlzcGF0Y2hFdmVudChOb2RlKiwgRXZlbnQm
KTsKK3ZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiwgRXZlbnQmKTsKIHZvaWQgZGlzcGF0
Y2hTaW11bGF0ZWRDbGljayhFbGVtZW50KiwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCwgU2ltdWxh
dGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucywgU2ltdWxhdGVkQ2xpY2tWaXN1YWxPcHRpb25zKTsK
IAotfTsKK30KIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaAppbmRleCBlOTkzNGM1MDhjMmYx
NjQ5ZDU0YjgwYjY1OGZmNmRjYmI0MTdlMWY3Li5hYzM5ZWM2MTdhZjhlZDQ2MmE1MWNkZWU3YTE1
ZDFmNDg4Mjg0YjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKQEAgLTM2LDcgKzM2LDcgQEAg
Y2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudFF1ZXVlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5F
dmVudFF1ZXVlKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChQYXNzUmVmUHRy
PEV2ZW50PikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYm
KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50JikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjbG9zZSgpID0gMDsgLy8gRGlzY2FyZCBhY2N1bXVsYXRlZCBldmVudHMgYW5k
IGFsbCBmdXR1cmUgZXZlbnRzLiBObyBldmVudHMgd2lsbCBiZSBkaXNwYXRjaGVkIGFmdGVyIHRo
aXMuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXggNzYyYTZhNTI4ZjM1MTM0
MzNjZGJkY2Y5NDBhNmU2Mjk3OTczNjI1Yi4uYWI1MTU5MjJhYjRiNzAwYmYxZTZlYjM4Mjk2NzM3
NDdhYTg2ZGUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCkBAIC0xMzQsNyArMTM0
LDcgQEAgYm9vbCBFdmVudFRhcmdldDo6Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogICAgIHJldHVybiByZW1vdmVFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTsKIH0KIAotYm9vbCBFdmVudFRhcmdldDo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiti
b29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KEV2ZW50KiBldmVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgaWYgKCFldmVudCkgewogICAgICAgICBlYyA9IFR5cGVFcnJvcjsKQEAg
LTE0OSwxNiArMTQ5LDE2IEBAIGJvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmICghc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZGlz
cGF0Y2hFdmVudChldmVudCk7CisgICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIH0K
IAotYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKK2Jvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAg
IGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhp
cyk7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7Ci0gICAgYm9v
bCBkZWZhdWx0UHJldmVudGVkID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LmdldCgpKTsKLSAg
ICBldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKKyAgICBldmVudC5zZXRUYXJnZXQodGhpcyk7Cisg
ICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICBldmVudC5zZXRFdmVudFBoYXNl
KEV2ZW50OjpBVF9UQVJHRVQpOworICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZpcmVFdmVu
dExpc3RlbmVycyhldmVudCk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsKICAgICByZXR1
cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KIApAQCAtMTY2LDMwICsxNjYsMzAgQEAgdm9pZCBFdmVu
dFRhcmdldDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCiB7CiB9CiAKLXN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIGxlZ2FjeVR5cGUoY29uc3QgRXZlbnQqIGV2ZW50KQorc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyYgbGVnYWN5VHlwZShjb25zdCBFdmVudCYgZXZlbnQpCiB7
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50
KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50
KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50Owog
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZl
bnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uc3RhcnRF
dmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2
ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbml0
ZXJhdGlvbkV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1h
dGlvbml0ZXJhdGlvbkV2ZW50KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdEFu
aW1hdGlvbkl0ZXJhdGlvbkV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50
TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQpCiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCku
d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLndoZWVsRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkud2hlZWxFdmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZl
bnQ7CiAKICAgICByZXR1cm4gZW1wdHlBdG9tOwogfQogCi1ib29sIEV2ZW50VGFyZ2V0OjpmaXJl
RXZlbnRMaXN0ZW5lcnMoRXZlbnQqIGV2ZW50KQorYm9vbCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50
TGlzdGVuZXJzKEV2ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTighTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRk
ZW4oKSk7Ci0gICAgQVNTRVJUKGV2ZW50ICYmIGV2ZW50LT5pc0luaXRpYWxpemVkKCkpOworICAg
IEFTU0VSVChldmVudC5pc0luaXRpYWxpemVkKCkpOwogCiAgICAgRXZlbnRUYXJnZXREYXRhKiBk
ID0gZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgaWYgKCFkKQpAQCAtMjAwLDIxICsyMDAsMjEgQEAg
Ym9vbCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCkKICAgICBp
ZiAoIWxlZ2FjeVR5cGVOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgbGVnYWN5TGlzdGVuZXJzVmVj
dG9yID0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5maW5kKGxlZ2FjeVR5cGVOYW1lKTsKIAotICAgIEV2
ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAu
ZmluZChldmVudC0+dHlwZSgpKTsKKyAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lcnNW
ZWN0b3IgPSBkLT5ldmVudExpc3RlbmVyTWFwLmZpbmQoZXZlbnQudHlwZSgpKTsKIAogICAgIGlm
IChsaXN0ZW5lcnNWZWN0b3IpCiAgICAgICAgIGZpcmVFdmVudExpc3RlbmVycyhldmVudCwgZCwg
Kmxpc3RlbmVyc1ZlY3Rvcik7CiAgICAgZWxzZSBpZiAobGVnYWN5TGlzdGVuZXJzVmVjdG9yKSB7
Ci0gICAgICAgIEF0b21pY1N0cmluZyB0eXBlTmFtZSA9IGV2ZW50LT50eXBlKCk7Ci0gICAgICAg
IGV2ZW50LT5zZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKKyAgICAgICAgQXRvbWljU3RyaW5nIHR5
cGVOYW1lID0gZXZlbnQudHlwZSgpOworICAgICAgICBldmVudC5zZXRUeXBlKGxlZ2FjeVR5cGVO
YW1lKTsKICAgICAgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBkLCAqbGVnYWN5TGlzdGVu
ZXJzVmVjdG9yKTsKLSAgICAgICAgZXZlbnQtPnNldFR5cGUodHlwZU5hbWUpOworICAgICAgICBl
dmVudC5zZXRUeXBlKHR5cGVOYW1lKTsKICAgICB9CiAKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZh
dWx0UHJldmVudGVkKCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9
CiAgICAgICAgIAotdm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBl
dmVudCwgRXZlbnRUYXJnZXREYXRhKiBkLCBFdmVudExpc3RlbmVyVmVjdG9yJiBlbnRyeSkKK3Zv
aWQgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQsIEV2ZW50VGFy
Z2V0RGF0YSogZCwgRXZlbnRMaXN0ZW5lclZlY3RvciYgZW50cnkpCiB7CiAgICAgUmVmPEV2ZW50
VGFyZ2V0PiBwcm90ZWN0KCp0aGlzKTsKIApAQCAtMjI2LDMyICsyMjYsMzIgQEAgdm9pZCBFdmVu
dFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCwgRXZlbnRUYXJnZXREYXRh
KiBkLCBFdmVudExpc3QKICAgICBzaXplX3Qgc2l6ZSA9IGVudHJ5LnNpemUoKTsKICAgICBpZiAo
IWQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKQogICAgICAgICBkLT5maXJpbmdFdmVudEl0ZXJhdG9y
cyA9IHN0ZDo6bWFrZV91bmlxdWU8RmlyaW5nRXZlbnRJdGVyYXRvclZlY3Rvcj4oKTsKLSAgICBk
LT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXBwZW5kKEZpcmluZ0V2ZW50SXRlcmF0b3IoZXZlbnQt
PnR5cGUoKSwgaSwgc2l6ZSkpOworICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5hcHBlbmQo
RmlyaW5nRXZlbnRJdGVyYXRvcihldmVudC50eXBlKCksIGksIHNpemUpKTsKIAogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbnVsbHB0cjsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRDb29raWU7CiAgICAgaWYgKGlzPERvY3VtZW50
Pihjb250ZXh0KSkgewogICAgICAgICBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250
ZXh0KTsKLSAgICAgICAgd2lsbERpc3BhdGNoRXZlbnRDb29raWUgPSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KCpkb2N1bWVudCwgKmV2ZW50LCBzaXplID4gMCk7
CisgICAgICAgIHdpbGxEaXNwYXRjaEV2ZW50Q29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsRGlzcGF0Y2hFdmVudCgqZG9jdW1lbnQsIGV2ZW50LCBzaXplID4gMCk7CiAgICAg
fQogCiAgICAgZm9yICg7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXImIHJlZ2lzdGVyZWRMaXN0ZW5lciA9IGVudHJ5W2ldOwotICAgICAgICBpZiAoZXZl
bnQtPmV2ZW50UGhhc2UoKSA9PSBFdmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmICFyZWdpc3RlcmVk
TGlzdGVuZXIudXNlQ2FwdHVyZSkKKyAgICAgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UoKSA9PSBF
dmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmICFyZWdpc3RlcmVkTGlzdGVuZXIudXNlQ2FwdHVyZSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZXZlbnQtPmV2ZW50UGhhc2UoKSA9
PSBFdmVudDo6QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUp
CisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJVQkJMSU5HX1BIQVNF
ICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgLy8gSWYgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIGhhcyBiZWVuIGNhbGxl
ZCwgd2UganVzdCBicmVhayBvdXQgaW1tZWRpYXRlbHksIHdpdGhvdXQKICAgICAgICAgLy8gaGFu
ZGxpbmcgYW55IG1vcmUgZXZlbnRzIG9uIHRoaXMgdGFyZ2V0LgotICAgICAgICBpZiAoZXZlbnQt
PmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBpZiAoZXZlbnQuaW1tZWRp
YXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsSGFuZGxlRXZlbnQoY29udGV4dCwgKmV2ZW50KTsKKyAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbEhhbmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKICAgICAgICAgLy8gVG8gbWF0Y2gg
TW96aWxsYSwgdGhlIEFUX1RBUkdFVCBwaGFzZSBmaXJlcyBib3RoIGNhcHR1cmluZyBhbmQgYnVi
YmxpbmcKICAgICAgICAgLy8gZXZlbnQgbGlzdGVuZXJzLCBldmVuIHRob3VnaCB0aGF0IHZpb2xh
dGVzIHNvbWUgdmVyc2lvbnMgb2YgdGhlIERPTSBzcGVjLgotICAgICAgICByZWdpc3RlcmVkTGlz
dGVuZXIubGlzdGVuZXItPmhhbmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKKyAgICAgICAgcmVn
aXN0ZXJlZExpc3RlbmVyLmxpc3RlbmVyLT5oYW5kbGVFdmVudChjb250ZXh0LCAmZXZlbnQpOwog
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KGNvb2tpZSk7
CiAgICAgfQogICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5yZW1vdmVMYXN0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCmluZGV4IDY4OGU2ZmY3MGI5MmNiNjg5M2JjOTlkZTc5MGYwNjg5
ZDdhNzkyZWYuLjcwNzc3NzQxYTdjNGZhMjcxZjAzZWFjMjNlYzc0NmZiOWM1NmEzY2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5oCkBAIC0xMjMsOCArMTIzLDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICB2aXJ0dWFs
IGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
RXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUFsbEV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pOwotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiwgRXhjZXB0aW9uQ29kZSYpOyAvLyBET00gQVBJCisgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnQmKTsKKyAgICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQqLCBFeGNlcHRpb25D
b2RlJik7IC8vIERPTSBBUEkKICAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRpb25JbkV2
ZW50SGFuZGxlcigpOwogCiAgICAgLy8gVXNlZCBmb3IgbGVnYWN5ICJvbkV2ZW50IiBhdHRyaWJ1
dGUgQVBJcy4KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNDYXB0dXJp
bmdFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAgICAgY29u
c3QgRXZlbnRMaXN0ZW5lclZlY3RvciYgZ2V0RXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpOwogCi0gICAgYm9vbCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQqKTsK
KyAgICBib29sIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYpOwogICAgIGJvb2wgaXNGaXJpbmdF
dmVudExpc3RlbmVycygpOwogCiAgICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpT
bG90VmlzaXRvciYpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIHJlZkV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFy
Z2V0KCkgPSAwOwogICAgIAotICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiwgRXZl
bnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYpOworICAgIHZvaWQgZmlyZUV2ZW50
TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYp
OwogCiAgICAgZnJpZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0dlbmVyaWNFdmVudFF1ZXVlLmNwcAppbmRleCA3MmRkMGZlZWQwMmFlMmRjN2M5
ZjNmZDZjZDdjZGE5OTMxNmMzOTJhLi5kYmE4NTI3MGRiNDc5NGY2ZmFiMjNhMjZiMzlmMWNiNTk0
YjFkZDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9HZW5lcmljRXZlbnRRdWV1ZS5jcHAKQEAgLTEw
MCw3ICsxMDAsNyBAQCB2b2lkIEdlbmVyaWNFdmVudFF1ZXVlOjpkaXNwYXRjaE9uZUV2ZW50KCkK
ICAgICBSZWY8RXZlbnRUYXJnZXQ+IHByb3RlY3QobV9vd25lcik7CiAgICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IG1fcGVuZGluZ0V2ZW50cy50YWtlRmlyc3QoKTsKICAgICBFdmVudFRhcmdldCYg
dGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpID8gKmV2ZW50LT50YXJnZXQoKSA6IG1fb3duZXI7Ci0g
ICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKKyAgICB0YXJnZXQuZGlz
cGF0Y2hFdmVudCgqZXZlbnQpOwogfQogCiB2b2lkIEdlbmVyaWNFdmVudFF1ZXVlOjpjbG9zZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCBjMzI1Njg0NGY0ODQ1OGU5YmM3NDdj
YzBlOWQ5ZDM3NTA3OGQ4ZWIwLi5hM2FiODk2YmY1M2NmOGEwN2RlNWU5MmZlOTY3NzQ5M2E2Zjk0
M2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTE2MCw5ICsxNjAsOCBAQCB2
b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPSBNZXNz
YWdlUG9ydDo6ZW50YW5nbGVQb3J0cygqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXVEY6Om1v
dmUoY2hhbm5lbHMpKTsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6
OmNyZWF0ZShXVEY6Om1vdmUocG9ydHMpLCBtZXNzYWdlLnJlbGVhc2UoKSk7Ci0KLSAgICAgICAg
ZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAg
ICAgUmVmPEV2ZW50PiBldmVudCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFdURjo6bW92ZShwb3J0
cyksIG1lc3NhZ2UucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMzg3Y2FlYjBmNTNiYzEyYjg0OTYzMDBmOWI4
MzhlN2JhOWJiMjk3NC4uNzI4ZDBhMjE5Y2U5OTMyYWFkNGRiMzhjMjYxM2ViM2MwM2M4ODQzNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcApAQCAtMjA5MCwxOSArMjA5MCwxOSBAQCB2b2lkIE5vZGU6OmhhbmRs
ZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpICYm
IGRvd25jYXN0PEVsZW1lbnQ+KCp0aGlzKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiBldmVu
dC5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlyZUV2ZW50TGlzdGVu
ZXJzKCZldmVudCk7CisgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIH0KIAotdm9pZCBO
b2RlOjpkaXNwYXRjaFNjb3BlZEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBO
b2RlOjpkaXNwYXRjaFNjb3BlZEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQoKnRoaXMsIGV2ZW50KTsKIH0KIAotYm9vbCBOb2Rl
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBOb2RlOjpkaXNw
YXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAh
UExBVEZPUk0oSU9TKQotICAgIGlmIChpczxUb3VjaEV2ZW50PigqZXZlbnQpKQotICAgICAgICBy
ZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFkb3B0UmVmKGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2
ZW50LmxlYWtSZWYoKSkpKTsKKyAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpKQorICAgICAg
ICByZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KSk7
CiAjZW5kaWYKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMs
IGV2ZW50KTsKIH0KQEAgLTIxMjYsNyArMjEyNiw3IEBAIHZvaWQgTm9kZTo6ZGlzcGF0Y2hTdWJ0
cmVlTW9kaWZpZWRFdmVudCgpCiBib29sIE5vZGU6OmRpc3BhdGNoRE9NQWN0aXZhdGVFdmVudChp
bnQgZGV0YWlsLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQpCiB7CiAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6
aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIFJlZlB0cjxVSUV2ZW50PiBldmVudCA9
IFVJRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCwgdHJ1ZSwgdHJ1
ZSwgZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBkZXRhaWwpOworICAgIFJlZjxVSUV2ZW50PiBl
dmVudCA9IFVJRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCwgdHJ1
ZSwgdHJ1ZSwgZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBkZXRhaWwpOwogICAgIGV2ZW50LT5z
ZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50KTsKICAgICBkaXNwYXRjaFNjb3BlZEV2
ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7CkBAIC0yMTQw
LDEwICsyMTQwLDEwIEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hUb3VjaEV2ZW50KFBhc3NSZWZQdHI8
VG91Y2hFdmVudD4gZXZlbnQpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTkRJRV9VSSkKLWJvb2wg
Tm9kZTo6ZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChQYXNzUmVmUHRyPFVJUmVxdWVzdEV2ZW50PiBl
dmVudCkKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChVSVJlcXVlc3RFdmVudCYg
ZXZlbnQpCiB7CiAgICAgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMsIGV2ZW50
KTsKLSAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkgfHwgZXZlbnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gZXZlbnQuZGVmYXVsdEhhbmRsZWQoKSB8fCBldmVudC5k
ZWZhdWx0UHJldmVudGVkKCk7CiB9CiAjZW5kaWYKICAgICAKQEAgLTIxNTMsOCArMjE1Myw4IEBA
IGJvb2wgTm9kZTo6ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgUmVmPE5vZGU+IHByb3RlY3QoKnRoaXMp
OwotICAgIFJlZlB0cjxCZWZvcmVMb2FkRXZlbnQ+IGJlZm9yZUxvYWRFdmVudCA9IEJlZm9yZUxv
YWRFdmVudDo6Y3JlYXRlKHNvdXJjZVVSTCk7Ci0gICAgZGlzcGF0Y2hFdmVudChiZWZvcmVMb2Fk
RXZlbnQuZ2V0KCkpOworICAgIFJlZjxCZWZvcmVMb2FkRXZlbnQ+IGJlZm9yZUxvYWRFdmVudCA9
IEJlZm9yZUxvYWRFdmVudDo6Y3JlYXRlKHNvdXJjZVVSTCk7CisgICAgZGlzcGF0Y2hFdmVudChi
ZWZvcmVMb2FkRXZlbnQpOwogICAgIHJldHVybiAhYmVmb3JlTG9hZEV2ZW50LT5kZWZhdWx0UHJl
dmVudGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGVmZjA4NmE1YmVlMmUwYmY4NWI3N2FjODdl
YmMyMWE1MDc1M2FiZDcuLjM3OWE4NjZhYjEwMmIyNTI2YjUxZTBjMDYxM2MyZjBhN2Y3NGEwMTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaApAQCAtNTE5LDkgKzUxOSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZl
bnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSkgb3ZlcnJpZGU7CiAKICAgICB1c2luZyBFdmVu
dFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZl
bnQoRXZlbnQmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChQYXNz
UmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBkaXNwYXRjaFNjb3BlZEV2ZW50KEV2ZW50Jik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmKTsKIApAQCAtNTM2LDcg
KzUzNiw3IEBAIHB1YmxpYzoKICAgICBib29sIGRpc3BhdGNoVG91Y2hFdmVudChQYXNzUmVmUHRy
PFRvdWNoRXZlbnQ+KTsKICNlbmRpZgogI2lmIEVOQUJMRShJTkRJRV9VSSkKLSAgICBib29sIGRp
c3BhdGNoVUlSZXF1ZXN0RXZlbnQoUGFzc1JlZlB0cjxVSVJlcXVlc3RFdmVudD4pOworICAgIGJv
b2wgZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChVSVJlcXVlc3RFdmVudCYpOwogI2VuZGlmCiAKICAg
ICBib29sIGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcAppbmRleCAyMGYxOGNkNGMyY2I4
NzJlNjc2ZGM3MTUzNjc1ZjVlOWViODQ2ZjM5Li45MzUwMTMyMzQ4NGEzNTQ0MzhmNDFkYTFiMzk3
MDAzYWE5ZDk3YTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRR
dWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwCkBA
IC00MywyNyArNDMsMjcgQEAgU2NvcGVkRXZlbnRRdWV1ZSYgU2NvcGVkRXZlbnRRdWV1ZTo6c2lu
Z2xldG9uKCkKICAgICByZXR1cm4gc2NvcGVkRXZlbnRRdWV1ZTsKIH0KIAotdm9pZCBTY29wZWRF
dmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIFNj
b3BlZEV2ZW50UXVldWU6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAg
aWYgKG1fc2NvcGluZ0xldmVsKQotICAgICAgICBtX3F1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQp
OworICAgICAgICBtX3F1ZXVlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2ZW50KSk7CiAgICAg
ZWxzZQogICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAotdm9pZCBTY29wZWRFdmVu
dFF1ZXVlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KSBjb25zdAordm9p
ZCBTY29wZWRFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkgY29uc3QKIHsK
LSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsKKyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkp
OwogICAgIC8vIFN0b3JlIHRoZSB0YXJnZXQgaW4gYSBsb2NhbCB2YXJpYWJsZSB0byBhdm9pZCBw
b3NzaWJseSBkZXJlZmVyZW5jaW5nIGEgbnVsbGlmaWVkIFBhc3NSZWZQdHIgYWZ0ZXIgaXQncyBw
YXNzZWQgb24uCi0gICAgTm9kZSogbm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7Cisg
ICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldCgpLT50b05vZGUoKTsKICAgICBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnQobm9kZSwgZXZlbnQpOwogfQogCiB2b2lkIFNjb3BlZEV2ZW50
UXVldWU6OmRpc3BhdGNoQWxsRXZlbnRzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4g
cXVldWVkRXZlbnRzID0gV1RGOjptb3ZlKG1fcXVldWVkRXZlbnRzKTsKKyAgICBWZWN0b3I8UmVm
PEV2ZW50Pj4gcXVldWVkRXZlbnRzID0gV1RGOjptb3ZlKG1fcXVldWVkRXZlbnRzKTsKICAgICBm
b3IgKGF1dG8mIHF1ZXVlZEV2ZW50IDogcXVldWVkRXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2
ZW50KHF1ZXVlZEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQocXVldWVk
RXZlbnQpOwogfQogCiB2b2lkIFNjb3BlZEV2ZW50UXVldWU6OmluY3JlbWVudFNjb3BpbmdMZXZl
bCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuaAppbmRleCBjZjZiMjljOGQ5OTEz
N2IwNWVjNjRlNjA0N2YzNDJlNWEyN2RmY2IwLi43OGJiYzY1ZjM5YWRkMzdkNDIxYmUwNDJlMzA5
ZjliZmFiMDUxNzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRR
dWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmgKQEAgLTQ2
LDE4ICs0NiwxOCBAQCBjbGFzcyBTY29wZWRFdmVudFF1ZXVlIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTY29wZWRFdmVudFF1ZXVlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFNjb3BlZEV2ZW50UXVldWUmIHNpbmdsZXRvbigpOwotICAgIHZvaWQg
ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVucXVldWVFdmVudChS
ZWY8RXZlbnQ+JiYpOwogCiBwcml2YXRlOgogICAgIFNjb3BlZEV2ZW50UXVldWUoKSA9IGRlZmF1
bHQ7CiAgICAgflNjb3BlZEV2ZW50UXVldWUoKSA9IGRlbGV0ZTsKIAotICAgIHZvaWQgZGlzcGF0
Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PikgY29uc3Q7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50
KEV2ZW50JikgY29uc3Q7CiAgICAgdm9pZCBkaXNwYXRjaEFsbEV2ZW50cygpOwogICAgIHZvaWQg
aW5jcmVtZW50U2NvcGluZ0xldmVsKCk7CiAgICAgdm9pZCBkZWNyZW1lbnRTY29waW5nTGV2ZWwo
KTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3F1ZXVlZEV2ZW50czsKKyAgICBWZWN0
b3I8UmVmPEV2ZW50Pj4gbV9xdWV1ZWRFdmVudHM7CiAgICAgdW5zaWduZWQgbV9zY29waW5nTGV2
ZWwgeyAwIH07CiAKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxXZWJDb3Jl
OjpTY29wZWRFdmVudFF1ZXVlPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcAppbmRleCA0MmY1ZTc5OTM5MmY1MWZjNzlkZGQxMTM1MzM5MmFlNDc2YmMy
ZWZiLi5mMDUyZDg2ZWI1NDUwYzI3MDM4YmQ1NGNkZGQ1NmM4Yzg1ZDA5OWY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC00MDQsNyArNDA0
LDcgQEAgYm9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaXNwYXRjaEVycm9yRXZlbnQoY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludAogCiAgICAgQVNTRVJUKCFtX2luRGlzcGF0Y2hF
cnJvckV2ZW50KTsKICAgICBtX2luRGlzcGF0Y2hFcnJvckV2ZW50ID0gdHJ1ZTsKLSAgICBSZWZQ
dHI8RXJyb3JFdmVudD4gZXJyb3JFdmVudCA9IEVycm9yRXZlbnQ6OmNyZWF0ZShtZXNzYWdlLCBz
b3VyY2VOYW1lLCBsaW5lLCBjb2x1bW4pOworICAgIFJlZjxFcnJvckV2ZW50PiBlcnJvckV2ZW50
ID0gRXJyb3JFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsIHNvdXJjZU5hbWUsIGxpbmUsIGNvbHVtbik7
CiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGVycm9yRXZlbnQpOwogICAgIG1faW5EaXNwYXRj
aEVycm9yRXZlbnQgPSBmYWxzZTsKICAgICByZXR1cm4gZXJyb3JFdmVudC0+ZGVmYXVsdFByZXZl
bnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAKaW5kZXggNjg5Mzc3MGVlMDFkNmRiNWZhOTZlMTJhNDcwMzExMTZkYzNi
Mzk3ZS4uYjcxZjk3M2U3ZTMwMWJlZDA0MTc3YWI3NmFhYWIwYTMxZTZjNTdmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
CkBAIC02ODIsMTAgKzY4MiwxMCBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omlu
c2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlYwogICAgIGlmIChG
cmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKICAgICAgICAgdmlldy0+ZGlzYWJsZUxh
eWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigpOwogCi0gICAgUmVm
UHRyPFRleHRFdmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRpY3RhdGlvbihtX2Zy
YW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMp
OworICAgIFJlZjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRp
b24obV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJu
YXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVudCk7
CiAKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT5kZWZh
dWx0SGFuZGxlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYWY1Mjg2
ZGM5MWVhZmVlYWEwYWFiNmE5NjVmNDZmN2M5ODI1MGRlYy4uY2YxYmUyYWJlNjRmYTc0NmFlNmIx
MDViNDY0MTc4MGI3NDUwZTUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNDYx
LDcgKzQ2MSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYg
cGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQogICAgIE5vZGUqIHRhcmdldCA9IGZpbmRF
dmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0
dXJuOwotICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvclBsYWlu
VGV4dFBhc3RlKGRvY3VtZW50KCkuZG9tV2luZG93KCksIHBhc3RpbmdUZXh0LCBzbWFydFJlcGxh
Y2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoVGV4dEV2
ZW50OjpjcmVhdGVGb3JQbGFpblRleHRQYXN0ZShkb2N1bWVudCgpLmRvbVdpbmRvdygpLCBwYXN0
aW5nVGV4dCwgc21hcnRSZXBsYWNlKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzRnJhZ21l
bnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBwYXN0aW5nRnJhZ21lbnQsIGJvb2wgc21h
cnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgcmVzcGVj
dHNNYWlsQmxvY2txdW90ZSkKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVB
c0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcGFzdGluZ0ZyYWdtZW50LCBi
b29sCiAgICAgTm9kZSogdGFyZ2V0ID0gZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpOwog
ICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47Ci0gICAgdGFyZ2V0LT5kaXNwYXRjaEV2
ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yRnJhZ21lbnRQYXN0ZShkb2N1bWVudCgpLmRvbVdpbmRv
dygpLCBwYXN0aW5nRnJhZ21lbnQsIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHlsZSwgcmVzcGVjdHNN
YWlsQmxvY2txdW90ZSksIElHTk9SRV9FWENFUFRJT04pOworICAgIHRhcmdldC0+ZGlzcGF0Y2hF
dmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckZyYWdtZW50UGFzdGUoZG9jdW1lbnQoKS5kb21XaW5k
b3coKSwgcGFzdGluZ0ZyYWdtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUsIHJlc3BlY3Rz
TWFpbEJsb2NrcXVvdGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHRCeXBh
c3NpbmdESFRNTCgpCkBAIC04NTEsOCArODUxLDggQEAgYm9vbCBFZGl0b3I6OmRpc3BhdGNoQ1BQ
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERhdGFUcmFuc2ZlckFjY2Vzc1AK
IAogICAgIFJlZlB0cjxEYXRhVHJhbnNmZXI+IGRhdGFUcmFuc2ZlciA9IERhdGFUcmFuc2Zlcjo6
Y3JlYXRlRm9yQ29weUFuZFBhc3RlKHBvbGljeSk7CiAKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50
ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHRydWUsIHRydWUsIGRhdGFUcmFu
c2Zlcik7Ci0gICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9O
KTsKKyAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudFR5
cGUsIHRydWUsIHRydWUsIGRhdGFUcmFuc2Zlcik7CisgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50
KGV2ZW50KTsKICAgICBib29sIG5vRGVmYXVsdFByb2Nlc3NpbmcgPSBldmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpOwogICAgIGlmIChub0RlZmF1bHRQcm9jZXNzaW5nICYmIHBvbGljeSA9PSBEYXRh
VHJhbnNmZXJBY2Nlc3NQb2xpY3k6OldyaXRhYmxlKSB7CiAgICAgICAgIGF1dG8gcGFzdGVib2Fy
ZCA9IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwpAQCAtMTAxMiw5ICsxMDEy
LDkgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKFBh
c3NSZWZQdHI8RWxlbWVudD4gcHJwU3RhcnRSb28KICAgICBSZWZQdHI8RWxlbWVudD4gc3RhcnRS
b290ID0gcHJwU3RhcnRSb290OwogICAgIFJlZlB0cjxFbGVtZW50PiBlbmRSb290ID0gcHJwRW5k
Um9vdDsKICAgICBpZiAoc3RhcnRSb290KQotICAgICAgICBzdGFydFJvb3QtPmRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdl
ZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgc3RhcnRS
b290LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdEVkaXRh
YmxlQ29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgaWYgKGVuZFJvb3Qg
JiYgZW5kUm9vdCAhPSBzdGFydFJvb3QpCi0gICAgICAgIGVuZFJvb3QtPmRpc3BhdGNoRXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2
ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgZW5kUm9vdC0+
ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNv
bnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiB2b2lkIEVkaXRvcjo6YXBw
bGllZEVkaXRpbmcoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gY21kKQpAQCAtMTcy
MCw4ICsxNzIwLDggQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
dGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgLy8gV2Ugc2hvdWxkIHNlbmQgdGhp
cyBldmVudCBiZWZvcmUgc2VuZGluZyBhIFRleHRFdmVudCBhcyB3cml0dGVuIGluIFNlY3Rpb24g
Ni4yLjIgYW5kIDYuMi4zIG9mCiAgICAgLy8gdGhlIERPTSBFdmVudCBzcGVjaWZpY2F0aW9uLgog
ICAgIGlmIChFbGVtZW50KiB0YXJnZXQgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCkpIHsK
LSAgICAgICAgUmVmUHRyPENvbXBvc2l0aW9uRXZlbnQ+IGV2ZW50ID0gQ29tcG9zaXRpb25FdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBkb2N1bWVudCgpLmRv
bVdpbmRvdygpLCB0ZXh0KTsKLSAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LnJl
bGVhc2UoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIFJlZjxDb21wb3NpdGlvbkV2ZW50
PiBldmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcG9zaXRp
b25lbmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7CisgICAgICAgIHRhcmdl
dC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgfQogCiAgICAgLy8gSWYgdGV4dCBpcyBlbXB0
eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJlLiAgSWYgdGV4dCBpcyBub24t
ZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dApAQCAtMTc5NSw4ICsxNzk1LDggQEAgdm9p
ZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9y
PENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBl
dmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcG9zaXRpb25l
bmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGV2ZW50LmdldCgpKQotICAgICAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2
ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKGV2ZW50KQorICAgICAgICAgICAg
dGFyZ2V0LT5kaXNwYXRjaEV2ZW50KCpldmVudCk7CiAgICAgfQogCiAgICAgLy8gSWYgdGV4dCBp
cyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJlLiAgSWYgdGV4dCBp
cyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1YjY4ZjU3Y2Zh
YzBiYmNhOWYxOGI0MmIxYTVhYjBiMTVmYmM4NThiLi43ODk3MmM3NTIyNmJkZjU0Y2I3NDU0OTcy
Nzg3NjNkYzQ3MmEwM2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTgyLDE2ICsxODIsMTYgQEAgUmVwbGFjZW1lbnRG
cmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIERvY3VtZW50
RnJhZ21lbnQqIGYKICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05vZGVzVG9GcmFn
bWVudChob2xkZXIuZ2V0KCkpOwogCiAgICAgLy8gR2l2ZSB0aGUgcm9vdCBhIGNoYW5jZSB0byBj
aGFuZ2UgdGhlIHRleHQuCi0gICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldnQg
PSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOwotICAgIGVkaXRhYmxlUm9v
dC0+ZGlzcGF0Y2hFdmVudChldnQsIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIGlmICh0ZXh0
ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhhc1JpY2hseUVkaXRhYmxlU3R5bGUo
KSkgeworICAgIFJlZjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOworICAgIGVkaXRhYmxlUm9vdC0+ZGlzcGF0Y2hF
dmVudChldmVudCk7CisgICAgaWYgKHRleHQgIT0gZXZlbnQtPnRleHQoKSB8fCAhZWRpdGFibGVS
b290LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgcmVzdG9yZUFuZFJlbW92
ZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsKIAogICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9mcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldnQtPnRleHQoKSk7CisgICAgICAg
IG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgZXZlbnQtPnRleHQo
KSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICAgICAg
cmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJbnNlcnRp
b25CYXNlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJbnNlcnRpb25C
YXNlQ29tbWFuZC5jcHAKaW5kZXggZmQ3MjE5ZDYwYTNhOGZmYTY2NmUwMTVlNWRhMTA1MmIyNmNj
MWM1Yy4uY2NjM2RkZWFlMmU3ZTg1NmJmZDIzODNmZmVlZDUxMGMxNTQ3OGI3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcApA
QCAtNjMsOSArNjMsOSBAQCBTdHJpbmcgZGlzcGF0Y2hCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChj
b25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGlmIChOb2RlKiBz
dGFydE5vZGUgPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uc3RhcnQoKS5jb250YWluZXJOb2RlKCkp
IHsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7CiAgICAg
ICAgICAgICAvLyBTZW5kIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LiBUaGUgZXZlbnQgaGFuZGxl
ciB3aWxsIHVwZGF0ZSB0ZXh0IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIFJlZlB0cjxCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZ0ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0
ZSh0ZXh0KTsKLSAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5k
aXNwYXRjaEV2ZW50KGV2dCwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICBuZXdUZXh0
ID0gZXZ0LT50ZXh0KCk7CisgICAgICAgICAgICBSZWY8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+
IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZSh0ZXh0KTsKKyAgICAgICAg
ICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5kaXNwYXRjaEV2ZW50KGV2ZW50
KTsKKyAgICAgICAgICAgIG5ld1RleHQgPSBldmVudC0+dGV4dCgpOwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiBuZXdUZXh0OwpAQCAtNzcsOCArNzcsOCBAQCBib29sIGNhbkFwcGVuZE5l
d0xpbmVGZWVkVG9TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlZlB0cjxC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6
Y3JlYXRlKFN0cmluZygiXG4iKSk7Ci0gICAgbm9kZS0+ZGlzcGF0Y2hFdmVudChldmVudCwgSUdO
T1JFX0VYQ0VQVElPTik7CisgICAgUmVmPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldmVudCA9
IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUoU3RyaW5nKCJcbiIpKTsKKyAgICBub2Rl
LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPnRleHQoKS5sZW5ndGgo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggOTU3
YTk3ZWFhMjQzNzg0Y2JmNTMyOGNkZWU3MTMwZjg0NjZlMmQ4YS4uMGFkNjFmMzdlYzIxY2I0MWE4
MTI2ZWUzNDYzNDI2NTA2NmFkMmQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCkBAIC01MTIwLDEwICs1MTIwLDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpt
ZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKE1lZGlhUGwK
ICAgICB1cGRhdGVNZWRpYVN0YXRlKFVwZGF0ZU1lZGlhU3RhdGU6OkFzeW5jaHJvbm91c2x5KTsK
IH0KIAotYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IHBycEV2ZW50KQorYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRjaEV2ZW50KEV2ZW50
JiBldmVudCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7Ci0gICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3Rhcmdl
dGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5h
bWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCkK
ICAgICAgICAgc2NoZWR1bGVEZWxheWVkQWN0aW9uKENoZWNrUGxheWJhY2tUYXJnZXRDb21wYXRh
YmxpdHkpOwogICAgIHJldHVybiBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDA1MGFjYjQ2MDcxYTRm
ZWM1NGFmMWM2ZmU3ZjMxZjBhZTE5ODA1OTMuLmEwM2YyYzRmYzZmZGVmNmYyZWE3ZjJmNGUzZTA4
NTY1YWVlZmZiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC01
NjQsNyArNTY0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVucXVldWVQbGF5YmFja1RhcmdldEF2
YWlsYWJpbGl0eUNoYW5nZWRFdmVudCgpOwogCiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3Bh
dGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3Zl
cnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKaW5kZXggZDZiMWY5YTZlYjRkNzJkOTllMGFkOTFi
ODUyNGI5ZDRmOGM0NTE0NS4uYjNlYjNiODA0ZWRiNDNjNWU3OGI4ZTRjZGU3MTljZTBjYmRlMmM2
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCkBAIC0yNjAsNyAr
MjYwLDcgQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpkaWRDb21wbGV0ZUxvYWQoTG9hZFN0YXR1
cyBzdGF0dXMpCiAKICAgICBpZiAoc3RhdHVzID09IEZhaWx1cmUpIHsKICAgICAgICAgc2V0UmVh
ZHlTdGF0ZShIVE1MVHJhY2tFbGVtZW50OjpUUkFDS19FUlJPUik7Ci0gICAgICAgIGRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZhbHNl
KSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OmRp
ZENvbXBsZXRlTG9hZChMb2FkU3RhdHVzIHN0YXR1cykKIAogICAgIC8vICAgICAyLiBJZiB0aGUg
ZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCwgZmlyZSBhIHNpbXBsZSBldmVudCBuYW1l
ZCBsb2FkIGF0IHRoZSAKICAgICAvLyAgICAgICAgdHJhY2sgZWxlbWVudC4KLSAgICBkaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNl
KSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiAvLyBOT1RFOiBUaGUg
dmFsdWVzIGluIHRoZSBUZXh0VHJhY2s6OlJlYWRpbmVzc1N0YXRlIGVudW0gbXVzdCBzdGF5IGlu
IHN5bmMgd2l0aCB0aG9zZSBpbiBIVE1MVHJhY2tFbGVtZW50OjpSZWFkeVN0YXRlLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCmluZGV4IDk2MzcyNDQ2NzY4NzQwNGVkNjJl
ZTM3ZDAxNGVmNGQ2NTMzNzA3MjEuLmRiYjAyYWI5ZTk0OTEyMTk0NmEwMGViYWQ3M2ExODIwYzdm
MTZiMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5jcHAKQEAgLTU0NCwx
MSArNTQ0LDExIEBAIHZvaWQgTWVkaWFDb250cm9sbGVyOjpzY2hlZHVsZUV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnROYW1lKQogCiB2b2lkIE1lZGlhQ29udHJvbGxlcjo6YXN5bmNFdmVu
dFRpbWVyRmlyZWQoKQogewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBwZW5kaW5nRXZlbnRz
OworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBwZW5kaW5nRXZlbnRzOwogCiAgICAgbV9wZW5kaW5n
RXZlbnRzLnN3YXAocGVuZGluZ0V2ZW50cyk7CiAgICAgZm9yIChhdXRvJiBwZW5kaW5nRXZlbnQg
OiBwZW5kaW5nRXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRpbmdFdmVudC5yZWxl
YXNlKCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRpbmdF
dmVudCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sbGVyOjpjbGVhclBvc2l0aW9uVGltZXJGaXJl
ZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaAppbmRleCA3NTMzYjQ4YzI3OGY1
ZDYxYzVmNmUwMjJjZTc0YzM2MTg1Njg0MmJjLi4zMTVlZWNkMTkxYTNjNjc5YTEyMjBjYzBmNmQ5
YjgzY2QwZjI1MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJv
bGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmgKQEAgLTE0
NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tdXRlZDsKICAgICBSZWFkeVN0YXRl
IG1fcmVhZHlTdGF0ZTsKICAgICBQbGF5YmFja1N0YXRlIG1fcGxheWJhY2tTdGF0ZTsKLSAgICBW
ZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9wZW5kaW5nRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZl
bnQ+PiBtX3BlbmRpbmdFdmVudHM7CiAgICAgVGltZXIgbV9hc3luY0V2ZW50VGltZXI7CiAgICAg
bXV0YWJsZSBUaW1lciBtX2NsZWFyUG9zaXRpb25UaW1lcjsKICAgICBTdHJpbmcgbV9tZWRpYUdy
b3VwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCAzMzBjOTUwNGIwNzY5ZDk0MDcyMzE3ZGRkMjk5M2Qy
OThiOWY5YWRjLi5lZDMwNDlkMzg2NjY0OTQ1ZTA5OWQ2NjNkYTgyOWRiNjU5MjM4ZDA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmNwcApAQCAtNDc2Niw3ICs0NzY2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpCiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50
KCkKIHsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwg
dHJ1ZSwgIiIpOworICAgIFJlZjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRl
eHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNl
LCB0cnVlLCAiIik7CiAgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgIG1f
cmVzdG9yZUFsbG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwogICAgIGlmIChtX2Nv
bnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5kZXgg
ZWVhMGVjNzU3NWQ3NzNjOGI0OTU1NWI4NmQ2NGI5ODAzZmVmYWNiOC4uZWRiMDYyNzJjYzgwMTk0
Nzk4YmZhMmZlZjBiNGIwNDFiYWQxYWZkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFVSTCBk
b2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgcmV0
dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKTsKIH0KIAotaW5saW5lIFBh
c3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpCitpbmxpbmUgUmVmPEV2ZW50
PiBjcmVhdGVTY3JpcHRMb2FkRXZlbnQoKQogewogICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKaW5kZXggYzI0NThkMjVlYTk0ODNmNGQ4NmE2M2M1
MDg2NzY1ZDVmNTYzOGUxNC4uYTZiMWRiYjg4NDRlNzMxMWM1NmE4NGI4NWIzOGQzNzcxYjEzNjEy
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcApAQCAtMTkw
LDcgKzE5MCw3IEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjppbnZhbGlkYXRlQ3VlSW5kZXgoKQogICAg
IG1fY3VlSW5kZXggPSBpbnZhbGlkQ3VlSW5kZXg7CiB9CiAKLWJvb2wgVGV4dFRyYWNrQ3VlOjpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBUZXh0VHJhY2tDdWU6
OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIC8vIFdoZW4gYSBUZXh0VHJhY2sn
cyBtb2RlIGlzIGRpc2FibGVkOiBubyBjdWVzIGFyZSBhY3RpdmUsIG5vIGV2ZW50cyBmaXJlZC4K
ICAgICBpZiAoIXRyYWNrKCkgfHwgdHJhY2soKS0+bW9kZSgpID09IFRleHRUcmFjazo6ZGlzYWJs
ZWRLZXl3b3JkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAppbmRl
eCBlYzJhYjIyZTJmNzYzZTg0MDdmYTNkMTg5ZDk2ZGJjMGU4ZDZjYjgyLi42NGU2ZmQyNTBiY2Yx
YjM5OWRjMjMzZTNmNDEyMWVkYTg4Y2E1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrQ3VlLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxp
ZGF0ZUN1ZUluZGV4KCk7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsK
LSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAog
ICAgIGJvb2wgaXNBY3RpdmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY3RpdmUoYm9vbCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA5ZDA2MTk5NmQ3NzM2ZDY5
YTAxNmJiMDUyN2U4ZDM1ZDM1MDE2MWU2Li42OGRlZDIzMTUzZTA3NmNlMWZkMTZmYmI1ZDNmZTJm
MTlkYTI5YTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTI4NTks
NyArMjg1OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmhhbmRsZVVubG9hZEV2ZW50cyhVbmxvYWRF
dmVudFBvbGljeSB1bmxvYWRFdmVudFBvbGljeSkKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY3NzAKIAogICAgICAgICAgICAgaWYgKCFt
X2ZyYW1lLmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8RXZlbnQ+IHVubG9hZEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2
ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBSZWY8RXZlbnQ+IHVubG9hZEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2Up
KTsKICAgICAgICAgICAgICAgICAvLyBUaGUgRG9jdW1lbnRMb2FkZXIgKGFuZCB0aHVzIGl0cyBE
b2N1bWVudExvYWRUaW1pbmcpIG1pZ2h0IGdldCBkZXN0cm95ZWQKICAgICAgICAgICAgICAgICAv
LyB3aGlsZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQsIHNvIHByb3RlY3QgaXQgdG8gcHJldmVudCB3
cml0aW5nIHRoZSBlbmQKICAgICAgICAgICAgICAgICAvLyB0aW1lIGludG8gZnJlZWQgbWVtb3J5
LgpAQCAtMjkwNSwxOCArMjkwNSwxOCBAQCBib29sIEZyYW1lTG9hZGVyOjpoYW5kbGVCZWZvcmVV
bmxvYWRFdmVudChDaHJvbWUmIGNocm9tZSwgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZAogICAgIGlm
ICghZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IAotICAgIFJlZlB0cjxCZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2FkRXZlbnQgPSBCZWZv
cmVVbmxvYWRFdmVudDo6Y3JlYXRlKCk7CisgICAgUmVmPEJlZm9yZVVubG9hZEV2ZW50PiBiZWZv
cmVVbmxvYWRFdmVudCA9IEJlZm9yZVVubG9hZEV2ZW50OjpjcmVhdGUoKTsKICAgICBtX3BhZ2VE
aXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IFBhZ2VEaXNtaXNzYWxUeXBlOjpCZWZvcmVV
bmxvYWQ7CiAKICAgICB7CiAgICAgICAgIEZvcmJpZFByb21wdHNTY29wZSBmb3JiaWRQcm9tcHRz
KG1fZnJhbWUucGFnZSgpKTsKLSAgICAgICAgZG9tV2luZG93LT5kaXNwYXRjaEV2ZW50KGJlZm9y
ZVVubG9hZEV2ZW50LmdldCgpLCBkb21XaW5kb3ctPmRvY3VtZW50KCkpOworICAgICAgICBkb21X
aW5kb3ctPmRpc3BhdGNoRXZlbnQoYmVmb3JlVW5sb2FkRXZlbnQsIGRvbVdpbmRvdy0+ZG9jdW1l
bnQoKSk7CiAgICAgfQogCiAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQg
PSBQYWdlRGlzbWlzc2FsVHlwZTo6Tm9uZTsKIAogICAgIGlmICghYmVmb3JlVW5sb2FkRXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKSkKLSAgICAgICAgZG9jdW1lbnQtPmRlZmF1bHRFdmVudEhhbmRs
ZXIoYmVmb3JlVW5sb2FkRXZlbnQuZ2V0KCkpOworICAgICAgICBkb2N1bWVudC0+ZGVmYXVsdEV2
ZW50SGFuZGxlcihiZWZvcmVVbmxvYWRFdmVudC5wdHIoKSk7CiAgICAgaWYgKGJlZm9yZVVubG9h
ZEV2ZW50LT5yZXR1cm5WYWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlSG9zdC5jcHAKaW5kZXggOTg5MDk5NDBlMzQ0ZjNiMjg2YjIwY2I1MWFkMTIwODA2ZjIyM2Qy
My4uODhlN2VlMmIyNTMxZGZmNzE3NjFmMmM1ZTcwY2U0ODJlODhiYTRlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3Qu
Y3BwCkBAIC0zNTAsNyArMzUwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZGlzcGF0
Y2hET01FdmVudChFdmVudElEIGlkLCBpbnQgdG90YWwsIGludCBkb25lKQogICAgICAgICAgICAg
ZXZlbnQgPSBQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVlLCBkb25lLCB0b3Rh
bCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVu
dFR5cGUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG1fZG9tQXBwbGljYXRpb25DYWNoZS0+ZGlz
cGF0Y2hFdmVudChldmVudCwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIG1fZG9tQXBw
bGljYXRpb25DYWNoZS0+ZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDFlZmFlYjQxYTc4ZjJlY2E5ODg1M2Y3NzIxZDllOGU1
Zjk0NWU4NTkuLmY4OWUxOTQ2ODg5NGYzNTMwMmRkNTVjZjA0ZTMxYzBlNmMyYTk2M2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIFJlZjxNZXNzYWdlRXZlbnQ+IGV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xl
UG9ydHMoKmNvbnRleHQsIFdURjo6bW92ZShtX2NoYW5uZWxzKSk7CiAgICAgICAgIHJldHVybiBN
ZXNzYWdlRXZlbnQ6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZVBvcnRzKSwgbV9tZXNzYWdlLCBt
X29yaWdpbiwgU3RyaW5nKCksIG1fc291cmNlKTsKQEAgLTkyOCw3ICs5MjgsNyBAQCB2b2lkIERP
TVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGltZXImIHRpbWVyKQog
ICAgIGRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKHRpbWVyLnRhcmdldE9yaWdp
bigpLCB0aW1lci5ldmVudChkb2N1bWVudCgpKSwgdGltZXIuc3RhY2tUcmFjZSgpKTsKIH0KIAot
dm9pZCBET01XaW5kb3c6OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3Vy
aXR5T3JpZ2luKiBpbnRlbmRlZFRhcmdldE9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQs
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlKQordm9pZCBET01XaW5kb3c6
OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3VyaXR5T3JpZ2luKiBpbnRl
bmRlZFRhcmdldE9yaWdpbiwgRXZlbnQmIGV2ZW50LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gc3RhY2tUcmFjZSkKIHsKICAgICBpZiAoaW50ZW5kZWRUYXJnZXRPcmlnaW4pIHsKICAgICAg
ICAgLy8gQ2hlY2sgdGFyZ2V0IG9yaWdpbiBub3cgc2luY2UgdGhlIHRhcmdldCBkb2N1bWVudCBt
YXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSB0aW1lciB3YXMgc2NoZWR1bGVkLgpAQCAtMTg3MCw3
ICsxODcwLDcgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIKIAogdm9pZCBET01XaW5kb3c6OmRp
c3BhdGNoTG9hZEV2ZW50KCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGxvYWRFdmVudChFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworICAgIFJlZjxF
dmVudD4gbG9hZEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBm
YWxzZSwgZmFsc2UpOwogICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmxvYWRlcigpLmRvY3Vt
ZW50TG9hZGVyKCkgJiYgIW1fZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnRpbWlu
ZygpLmxvYWRFdmVudFN0YXJ0KCkpIHsKICAgICAgICAgLy8gVGhlIERvY3VtZW50TG9hZGVyIChh
bmQgdGh1cyBpdHMgRG9jdW1lbnRMb2FkVGltaW5nKSBtaWdodCBnZXQgZGVzdHJveWVkIHdoaWxl
IGRpc3BhdGNoaW5nCiAgICAgICAgIC8vIHRoZSBldmVudCwgc28gcHJvdGVjdCBpdCB0byBwcmV2
ZW50IHdyaXRpbmcgdGhlIGVuZCB0aW1lIGludG8gZnJlZWQgbWVtb3J5LgpAQCAtMTg5MiwzNCAr
MTg5MiwzMyBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6bG9hZEV2ZW50RmlyZWQoZnJhbWUoKSk7CiB9CiAKLWJvb2wg
RE9NV2luZG93OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50LCBQYXNz
UmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBUYXJnZXQpCitib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hF
dmVudChFdmVudCYgZXZlbnQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAgICAgUmVmPEV2ZW50
VGFyZ2V0PiBwcm90ZWN0KCp0aGlzKTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZl
bnQ7CiAKICAgICAvLyBQYXVzaW5nIGEgcGFnZSBtYXkgdHJpZ2dlciBwYWdlaGlkZSBhbmQgcGFn
ZXNob3cgZXZlbnRzLiBXZWJDb3JlIGFsc28gaW1wbGljaXRseSBmaXJlcyB0aGVzZQogICAgIC8v
IGV2ZW50cyB3aGVuIGNsb3NpbmcgYSBXZWJWaWV3LiBIZXJlIHdlIGtlZXAgdHJhY2sgb2YgdGhl
IHN0YXRlIG9mIHRoZSBwYWdlIHRvIHByZXZlbnQgZHVwbGljYXRlLAogICAgIC8vIHVuYmFsYW5j
ZWQgZXZlbnRzIHBlciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcGFnZXNob3cgZXZlbnQ6CiAgICAg
Ly8gPGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVs
dGlwYWdlL2hpc3RvcnkuaHRtbCNldmVudC1wYWdlc2hvdz4uCi0gICAgaWYgKGV2ZW50LT5ldmVu
dEludGVyZmFjZSgpID09IFBhZ2VUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VUeXBlKSB7Ci0gICAg
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wYWdlc2hvd0V2ZW50KSB7Cisg
ICAgaWYgKGV2ZW50LmV2ZW50SW50ZXJmYWNlKCkgPT0gUGFnZVRyYW5zaXRpb25FdmVudEludGVy
ZmFjZVR5cGUpIHsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFn
ZXNob3dFdmVudCkgewogICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFnZVN0
YXR1c1Nob3duKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBFdmVudCB3YXMgcHJl
dmlvdXNseSBkaXNwYXRjaGVkOyBkbyBub3QgZmlyZSBhIGR1cGxpY2F0ZSBldmVudC4KICAgICAg
ICAgICAgIG1fbGFzdFBhZ2VTdGF0dXMgPSBQYWdlU3RhdHVzU2hvd247Ci0gICAgICAgIH0gZWxz
ZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCkgeworICAg
ICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZWhpZGVFdmVu
dCkgewogICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFnZVN0YXR1c0hpZGRl
bikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRXZlbnQgd2FzIHByZXZpb3VzbHkg
ZGlzcGF0Y2hlZDsgZG8gbm90IGZpcmUgYSBkdXBsaWNhdGUgZXZlbnQuCiAgICAgICAgICAgICBt
X2xhc3RQYWdlU3RhdHVzID0gUGFnZVN0YXR1c0hpZGRlbjsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGV2ZW50LT5zZXRUYXJnZXQocHJwVGFyZ2V0ID8gcHJwVGFyZ2V0IDogdGhpcyk7Ci0gICAg
ZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2Uo
RXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KHRhcmdldCA/IHRhcmdldCA6
IHRoaXMpOworICAgIGV2ZW50LnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgZXZlbnQuc2V0
RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKIAotICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRj
aEV2ZW50T25XaW5kb3coZnJhbWUoKSwgKmV2ZW50LCAqdGhpcyk7CisgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bERpc3BhdGNoRXZlbnRPbldpbmRvdyhmcmFtZSgpLCBldmVudCwgKnRoaXMpOwogCi0gICAgYm9v
bCByZXN1bHQgPSBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQuZ2V0KCkpOworICAgIGJvb2wgcmVz
dWx0ID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIAogICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93KGNvb2tpZSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5oCmluZGV4IDBkOGQ5NTM1YWI3NDNkOTI5Njc1YTViYzQwYjE0NDI4YjhjNTI3ZWQu
LmI1MDAxYmNmMWI3MDZmZTcwZWI0OGY0YTc4NzFlNzI2YjJiYTFhNTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaApAQCAtMjQ0LDcgKzI0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gTmVlZGVkIGZvciBPYmplY3RpdmUtQyBiaW5kaW5ncyAoc2VlIGJ1ZyAyODc3NCkuCiAg
ICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdp
bmRvdyYgc291cmNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VU
aW1lckZpcmVkKFBvc3RNZXNzYWdlVGltZXImKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3Nh
Z2VFdmVudFdpdGhPcmlnaW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5kZWRUYXJnZXRPcmln
aW4sIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0
YWNrPik7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRoT3JpZ2luQ2hlY2so
U2VjdXJpdHlPcmlnaW4qIGludGVuZGVkVGFyZ2V0T3JpZ2luLCBFdmVudCYsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+KTsKIAogICAgICAgICB2b2lkIHNjcm9sbEJ5KGlu
dCB4LCBpbnQgeSkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2Nyb2xsVG8oaW50IHgsIGludCB5KSBj
b25zdDsKQEAgLTI3OCw3ICsyNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpIG92ZXJyaWRlOwogCiAgICAgICAg
IHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgICAgICBib29sIGRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+
IHBycFRhcmdldCk7CisgICAgICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYsIEV2ZW50VGFy
Z2V0Kik7CiAKICAgICAgICAgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcAppbmRleCA5MjU3NTRlYzQzNjEwZTdhN2Y2OTli
Njg0ODE1MmU3MmM4NWFmNjIxLi4zYzM4NDMwOTU2MzQ5NjIyYWUyZTE5ZmQ1Yjc2MDM4NWM5NTkw
NGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5jcHAKQEAgLTcxLDkg
KzcxLDggQEAgdm9pZCBEZXZpY2VDb250cm9sbGVyOjpyZW1vdmVBbGxEZXZpY2VFdmVudExpc3Rl
bmVycyhET01XaW5kb3cqIHdpbmRvdykKICAgICAgICAgbV9jbGllbnQtPnN0b3BVcGRhdGluZygp
OwogfQogCi12b2lkIERldmljZUNvbnRyb2xsZXI6OmRpc3BhdGNoRGV2aWNlRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gcHJwRXZlbnQpCit2b2lkIERldmljZUNvbnRyb2xsZXI6OmRpc3BhdGNoRGV2
aWNlRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBF
dmVudDsKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4+IGxpc3RlbmVyVmVjdG9yOwogICAg
IGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycywgbGlzdGVuZXJWZWN0b3IpOwogICAgIGZvciAoYXV0
byYgbGlzdGVuZXIgOiBsaXN0ZW5lclZlY3RvcikgewpAQCAtOTMsOCArOTIsMTAgQEAgdm9pZCBE
ZXZpY2VDb250cm9sbGVyOjpmaXJlRGV2aWNlRXZlbnQoKQogICAgIG1fbGFzdEV2ZW50TGlzdGVu
ZXJzLmNsZWFyKCk7CiAgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IGxpc3RlbmVyVmVjdG9yKSB7
CiAgICAgICAgIGF1dG8gZG9jdW1lbnQgPSBsaXN0ZW5lci0+ZG9jdW1lbnQoKTsKLSAgICAgICAg
aWYgKGRvY3VtZW50ICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgp
ICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKLSAgICAgICAgICAg
IGxpc3RlbmVyLT5kaXNwYXRjaEV2ZW50KGdldExhc3RFdmVudCgpKTsKKyAgICAgICAgaWYgKGRv
Y3VtZW50ICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpICYmICFk
b2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYg
KGF1dG8gbGFzdEV2ZW50ID0gZ2V0TGFzdEV2ZW50KCkpCisgICAgICAgICAgICAgICAgbGlzdGVu
ZXItPmRpc3BhdGNoRXZlbnQoKmxhc3RFdmVudCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmgKaW5kZXggZmRmNWQxZDk2ZDE1Nzc2NzZj
YTkwOWY5MTg5M2M1N2Y5ODA4YTVjZi4uMjE4NjFmMjRlNWU0MzhlNzAwMmQ3OWYxMjNlNjhiY2I5
YmEwODg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmgKQEAgLTQ4LDEy
ICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVEZXZpY2VFdmVudExpc3RlbmVyKERP
TVdpbmRvdyopOwogICAgIHZvaWQgcmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnMoRE9NV2lu
ZG93Kik7CiAKLSAgICB2b2lkIGRpc3BhdGNoRGV2aWNlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4p
OworICAgIHZvaWQgZGlzcGF0Y2hEZXZpY2VFdmVudChFdmVudCYpOwogICAgIGJvb2wgaXNBY3Rp
dmUoKSB7IHJldHVybiAhbV9saXN0ZW5lcnMuaXNFbXB0eSgpOyB9CiAgICAgRGV2aWNlQ2xpZW50
KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgdmlydHVhbCBib29sIGhhc0xh
c3REYXRhKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RXZlbnQ+
IGdldExhc3RFdmVudCgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4g
Z2V0TGFzdEV2ZW50KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBmaXJlRGV2aWNlRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAK
aW5kZXggMDUwYjYyODk1YWVhNzM2NDlkMmFlNDY0ZTU5ZmM2ODNmMWE2YjlkMC4uZGFhMGY5OGY5
YzBhMjU2NmUxMDg5ZTUwZDlkZDU2MGI4ZWRmNzdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFn
Q29udHJvbGxlci5jcHAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpk
aXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9yKEZyYW1lKiBpbm5lckZyYW1lLCBEcmFnRGF0YSYgZHJh
ZwogICAgIEFTU0VSVChtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmhhc0NhcmV0KCkpOwog
ICAgIFN0cmluZyB0ZXh0ID0gbV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSgpID8gZW1wdHlTdHJpbmcoKSA6IGRyYWdEYXRhLmFzUGxhaW5UZXh0KCk7
CiAgICAgTm9kZSogdGFyZ2V0ID0gaW5uZXJGcmFtZS0+ZWRpdG9yKCkuZmluZEV2ZW50VGFyZ2V0
RnJvbShtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmNhcmV0UG9zaXRpb24oKSk7Ci0gICAg
cmV0dXJuIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3AoaW5u
ZXJGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHRleHQpLCBJR05PUkVfRVhDRVBUSU9O
KTsKKyAgICByZXR1cm4gdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9y
RHJvcChpbm5lckZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCkpOwogfQogCiBi
b29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRhJiBkcmFnRGF0YSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2NzBlMTM1ZjNkMzRmZDMzNjZk
Mzg4YTZlOTAwNmM3NWMxZWQ0ZmEzLi5jNzFkOWEyM2E0YmEwYTA1MGQxNWJkODQ1MTI0NjI1N2Q2
MDE2NTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMDEyLDEzICsz
MDEyLDEzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkKICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQga2V5
RG93bkV2ZW50ID0gaW5pdGlhbEtleUV2ZW50OyAgICAKICAgICBpZiAoa2V5RG93bkV2ZW50LnR5
cGUoKSAhPSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICBrZXlEb3duRXZlbnQu
ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24sIGJhY2t3
YXJkQ29tcGF0aWJpbGl0eU1vZGUpOwotICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBrZXlkb3du
ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleURvd25FdmVudCwgbV9mcmFtZS5kb2N1bWVudCgp
LT5kZWZhdWx0VmlldygpKTsKKyAgICBSZWY8S2V5Ym9hcmRFdmVudD4ga2V5ZG93biA9IEtleWJv
YXJkRXZlbnQ6OmNyZWF0ZShrZXlEb3duRXZlbnQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+ZGVmYXVs
dFZpZXcoKSk7CiAgICAgaWYgKG1hdGNoZWRBbkFjY2Vzc0tleSkKICAgICAgICAga2V5ZG93bi0+
c2V0RGVmYXVsdFByZXZlbnRlZCh0cnVlKTsKICAgICBrZXlkb3duLT5zZXRUYXJnZXQoZWxlbWVu
dCk7CiAKICAgICBpZiAoaW5pdGlhbEtleUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpS
YXdLZXlEb3duKSB7Ci0gICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93biwgSUdO
T1JFX0VYQ0VQVElPTik7CisgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93bik7
CiAgICAgICAgIC8vIElmIGZyYW1lIGNoYW5nZWQgYXMgYSByZXN1bHQgb2Yga2V5ZG93biBkaXNw
YXRjaCwgdGhlbiByZXR1cm4gdHJ1ZSB0byBhdm9pZCBzZW5kaW5nIGEgc3Vic2VxdWVudCBrZXlw
cmVzcyBtZXNzYWdlIHRvIHRoZSBuZXcgZnJhbWUuCiAgICAgICAgIGJvb2wgY2hhbmdlZEZvY3Vz
ZWRGcmFtZSA9IG1fZnJhbWUucGFnZSgpICYmICZtX2ZyYW1lICE9ICZtX2ZyYW1lLnBhZ2UoKS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgICAgIHJldHVybiBr
ZXlkb3duLT5kZWZhdWx0SGFuZGxlZCgpIHx8IGtleWRvd24tPmRlZmF1bHRQcmV2ZW50ZWQoKSB8
fCBjaGFuZ2VkRm9jdXNlZEZyYW1lOwpAQCAtMzAyOSw3ICszMDI5LDcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgaW5pdGlhbEtleUV2
ZW50KQogICAgIC8vIGluIG9yZGVyIHRvIG1hdGNoIElFOgogICAgIC8vIDEuIHByZXZlbnRpbmcg
ZGVmYXVsdCBoYW5kbGluZyBvZiBrZXlkb3duIGFuZCBrZXlwcmVzcyBldmVudHMgaGFzIG5vIGVm
ZmVjdCBvbiBJTSBpbnB1dDsKICAgICAvLyAyLiBpZiBhbiBpbnB1dCBtZXRob2QgaGFuZGxlcyB0
aGUgZXZlbnQsIGl0cyBrZXlDb2RlIGlzIHNldCB0byAyMjkgaW4ga2V5ZG93biBldmVudC4KLSAg
ICBtX2ZyYW1lLmVkaXRvcigpLmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihrZXlkb3duLmdldCgp
KTsKKyAgICBtX2ZyYW1lLmVkaXRvcigpLmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihrZXlkb3du
LnB0cigpKTsKICAgICAKICAgICBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kID0ga2V5ZG93bi0+
ZGVmYXVsdEhhbmRsZWQoKTsKICAgICAKQEAgLTMwNDAsMTAgKzMwNDAsMTAgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgaW5pdGlhbEtl
eUV2ZW50KQogICAgICAgICBrZXlkb3duLT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KICAg
ICAKLSAgICBpZiAoYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihrZXlkb3du
LmdldCgpKSkKKyAgICBpZiAoYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihr
ZXlkb3duKSkKICAgICAgICAga2V5ZG93bi0+c3RvcFByb3BhZ2F0aW9uKCk7CiAKLSAgICBlbGVt
ZW50LT5kaXNwYXRjaEV2ZW50KGtleWRvd24sIElHTk9SRV9FWENFUFRJT04pOworICAgIGVsZW1l
bnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93bik7CiAgICAgLy8gSWYgZnJhbWUgY2hhbmdlZCBhcyBh
IHJlc3VsdCBvZiBrZXlkb3duIGRpc3BhdGNoLCB0aGVuIHJldHVybiBlYXJseSB0byBhdm9pZCBz
ZW5kaW5nIGEgc3Vic2VxdWVudCBrZXlwcmVzcyBtZXNzYWdlIHRvIHRoZSBuZXcgZnJhbWUuCiAg
ICAgYm9vbCBjaGFuZ2VkRm9jdXNlZEZyYW1lID0gbV9mcmFtZS5wYWdlKCkgJiYgJm1fZnJhbWUg
IT0gJm1fZnJhbWUucGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKICAgICBib29sIGtleWRvd25SZXN1bHQgPSBrZXlkb3duLT5kZWZhdWx0SGFuZGxlZCgpIHx8
IGtleWRvd24tPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBjaGFuZ2VkRm9jdXNlZEZyYW1lOwpAQCAt
MzA2MiwxNCArMzA2MiwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxh
dGZvcm1LZXlib2FyZEV2ZW50JiBpbml0aWFsS2V5RXZlbnQpCiAgICAga2V5UHJlc3NFdmVudC5k
aXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1FdmVudDo6Q2hhciwgYmFja3dhcmRDb21w
YXRpYmlsaXR5TW9kZSk7CiAgICAgaWYgKGtleVByZXNzRXZlbnQudGV4dCgpLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGtleWRvd25SZXN1bHQ7Ci0gICAgUmVmUHRyPEtleWJvYXJkRXZlbnQ+
IGtleXByZXNzID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleVByZXNzRXZlbnQsIG1fZnJhbWUu
ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7CisgICAgUmVmPEtleWJvYXJkRXZlbnQ+IGtleXBy
ZXNzID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleVByZXNzRXZlbnQsIG1fZnJhbWUuZG9jdW1l
bnQoKS0+ZGVmYXVsdFZpZXcoKSk7CiAgICAga2V5cHJlc3MtPnNldFRhcmdldChlbGVtZW50KTsK
ICAgICBpZiAoa2V5ZG93blJlc3VsdCkKICAgICAgICAga2V5cHJlc3MtPnNldERlZmF1bHRQcmV2
ZW50ZWQodHJ1ZSk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAga2V5cHJlc3MtPmtleXByZXNz
Q29tbWFuZHMoKSA9IGtleWRvd24tPmtleXByZXNzQ29tbWFuZHMoKTsKICNlbmRpZgotICAgIGVs
ZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5cHJlc3MsIElHTk9SRV9FWENFUFRJT04pOworICAgIGVs
ZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5cHJlc3MpOwogCiAgICAgcmV0dXJuIGtleWRvd25SZXN1
bHQgfHwga2V5cHJlc3MtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBrZXlwcmVzcy0+ZGVmYXVsdEhh
bmRsZWQoKTsKIH0KQEAgLTMxODYsNyArMzE4Niw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpoYW5k
bGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50Rm9yQWNjZXNzaWJpbGl0eShLZXlib2FyZEV2ZW50
CiAgICAgfQogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6YWNjZXNzaWJpbGl0eVByZXZlbnRzRXZl
bnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50KiBldmVudCkKK2Jvb2wgRXZlbnRIYW5kbGVyOjph
Y2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQmIGV2ZW50
KQogewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNz
aWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQoKSkKQEAgLTMxOTYsOSArMzE5Niw5
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjphY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0
aW9uKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAv
LyBDaGVjayBmb3Iga2V5IGV2ZW50cyB0aGF0IGFyZSByZWxldmFudCB0byBhY2Nlc3NpYmlsaXR5
OiB0YWIgYW5kIGFycm93cyBrZXlzIHRoYXQgY2hhbmdlIGZvY3VzCi0gICAgaWYgKGV2ZW50LT5r
ZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwOSIpCisgICAgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIo
KSA9PSAiVSswMDA5IikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uID0gZm9jdXNEaXJlY3Rpb25Gb3JLZXkoZXZlbnQtPmtleUlkZW50aWZpZXIoKSk7
CisgICAgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gZm9jdXNEaXJlY3Rpb25Gb3JLZXkoZXZl
bnQua2V5SWRlbnRpZmllcigpKTsKICAgICBpZiAoZGlyZWN0aW9uICE9IEZvY3VzRGlyZWN0aW9u
Tm9uZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQpAQCAtMzQ5NCwxMCArMzQ5NCwxMCBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4dElucHV0RXZlbnQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBFdmVudCogdW5kZXJseWluZ0V2ZQogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2Zy
YW1lLnZpZXcoKSkKICAgICAgICAgdmlldy0+ZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVt
cG9yYXJpbHlGb3JJbnRlcmFjdGlvbigpOwogCi0gICAgUmVmUHRyPFRleHRFdmVudD4gZXZlbnQg
PSBUZXh0RXZlbnQ6OmNyZWF0ZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0
LCBpbnB1dFR5cGUpOworICAgIFJlZjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVh
dGUobV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgaW5wdXRUeXBlKTsKICAg
ICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdFdmVudCk7CiAKLSAgICB0YXJn
ZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgIHRhcmdldC0+
ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
OwogfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggM2Q1NzU4ODRhOWJh
ODYwN2E3OWE3ZmQ0N2M3NmQxNzQzMjNiOTM4Ny4uMjQzNWRhMDE1MTE4M2FlNmQzZmFhOTlkZTQ5
NzY3MTU3M2E5M2M5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0yNDcsNyAr
MjQ3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wga2V5RXZlbnQoY29uc3Qg
UGxhdGZvcm1LZXlib2FyZEV2ZW50Jik7CiAgICAgdm9pZCBkZWZhdWx0S2V5Ym9hcmRFdmVudEhh
bmRsZXIoS2V5Ym9hcmRFdmVudCopOwogCi0gICAgYm9vbCBhY2Nlc3NpYmlsaXR5UHJldmVudHNF
dmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQqKTsKKyAgICBib29sIGFjY2Vzc2liaWxpdHlQ
cmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVudCYpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgaGFuZGxlS2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudEZvckFjY2Vzc2liaWxpdHko
S2V5Ym9hcmRFdmVudCopOwogCiAgICAgYm9vbCBoYW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBT
dHJpbmcmIHRleHQsIEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQgPSBudWxscHRyLCBUZXh0RXZlbnRJ
bnB1dFR5cGUgPSBUZXh0RXZlbnRJbnB1dEtleWJvYXJkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNv
dXJjZS5jcHAKaW5kZXggOWY5MGIwMWIxNTg1NDA4ZjY2MGQ3YjFkMDBlYzk2ZmM4MTJmYWRiNy4u
NGExMDE1MTJkNjg2NjM4ODYwMGVkNzMyZmMzY2E4NDE2ZjdhNDBiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudFNvdXJjZS5jcHAKQEAgLTQxMCwxMSArNDEwLDExIEBAIGJvb2wgRXZlbnRTb3VyY2U6
OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
UGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IEV2ZW50U291cmNlOjpjcmVhdGVNZXNzYWdlRXZlbnQo
KQorUmVmPE1lc3NhZ2VFdmVudD4gRXZlbnRTb3VyY2U6OmNyZWF0ZU1lc3NhZ2VFdmVudCgpCiB7
Ci0gICAgUmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZlbnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgp
OworICAgIFJlZjxNZXNzYWdlRXZlbnQ+IGV2ZW50ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoKTsK
ICAgICBldmVudC0+aW5pdE1lc3NhZ2VFdmVudChtX2V2ZW50TmFtZS5pc0VtcHR5KCkgPyBldmVu
dE5hbWVzKCkubWVzc2FnZUV2ZW50IDogQXRvbWljU3RyaW5nKG1fZXZlbnROYW1lKSwgZmFsc2Us
IGZhbHNlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShTdHJpbmc6OmFkb3B0KG1fZGF0
YSkpLCBtX2V2ZW50U3RyZWFtT3JpZ2luLCBtX2xhc3RFdmVudElkLCAwLCAwKTsKLSAgICByZXR1
cm4gZXZlbnQucmVsZWFzZSgpOworICAgIHJldHVybiBldmVudDsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCmluZGV4IGU0OWQ2OGUyMzdmYjk5
ZTYxMGU2ZDZjN2UzNmFjOWQzYTRjMjhjNmMuLjFkMjU0NThlZTNkMGJmYWRiMTIzYjAxYmY2Zjlm
ZWRlMDI0M2RlNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKQEAgLTk5LDcgKzk5LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGFib3J0Q29ubmVjdGlvbkF0dGVtcHQoKTsKICAgICB2b2lk
IHBhcnNlRXZlbnRTdHJlYW0oKTsKICAgICB2b2lkIHBhcnNlRXZlbnRTdHJlYW1MaW5lKHVuc2ln
bmVkIHBvcywgaW50IGZpZWxkTGVuZ3RoLCBpbnQgbGluZUxlbmd0aCk7Ci0gICAgUGFzc1JlZlB0
cjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZU1lc3NhZ2VFdmVudCgpOworICAgIFJlZjxNZXNzYWdlRXZl
bnQ+IGNyZWF0ZU1lc3NhZ2VFdmVudCgpOwogCiAgICAgVVJMIG1fdXJsOwogICAgIGJvb2wgbV93
aXRoQ3JlZGVudGlhbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggMWU3ZmVkNzAx
N2FhMmI5ZDIwMWNhZDAwMTcxYzkwNjg1YzUzZGM4NC4uMzFhYzMxZTAyZWEyMjU5ZjhlMjg2N2Rh
N2NmNzVkZTdmMTQzZDhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMzE4NCwx
NCArMzE4NCwxNCBAQCB2b2lkIEZyYW1lVmlldzo6c2VuZFJlc2l6ZUV2ZW50SWZOZWVkZWQoKQog
ICAgIGJvb2wgaXNNYWluRnJhbWUgPSBmcmFtZSgpLmlzTWFpbkZyYW1lKCk7CiAgICAgYm9vbCBj
YW5TZW5kUmVzaXplRXZlbnRTeW5jaHJvbm91c2x5ID0gaXNNYWluRnJhbWUgJiYgIW1fc2hvdWxk
QXV0b1NpemU7CiAKLSAgICBSZWZQdHI8RXZlbnQ+IHJlc2l6ZUV2ZW50ID0gRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkucmVzaXplRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgUmVmPEV2ZW50
PiByZXNpemVFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBm
YWxzZSwgZmFsc2UpOwogICAgIGlmIChjYW5TZW5kUmVzaXplRXZlbnRTeW5jaHJvbm91c2x5KQot
ICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQocmVzaXplRXZl
bnQucmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRv
d0V2ZW50KHJlc2l6ZUV2ZW50KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gRklYTUU6IFF1ZXVl
aW5nIHRoaXMgZXZlbnQgZm9yIGFuIHVucHJlZGljdGFibGUgdGltZSBpbiB0aGUgZnV0dXJlIHNl
ZW1zCiAgICAgICAgIC8vIGludHJpbnNpY2FsbHkgcmFjeS4gQnkgdGhlIHRpbWUgdGhpcyByZXNp
emUgZXZlbnQgZmlyZXMsIHRoZSBmcmFtZSBtaWdodAogICAgICAgICAvLyBiZSByZXNpemVkIGFn
YWluLCBzbyB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0d28gcmVzaXplIGV2ZW50cyBmb3IgdGhlIHNh
bWUgc2l6ZS4KLSAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1ZXVlV2luZG93RXZlbnQo
cmVzaXplRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1
ZXVlV2luZG93RXZlbnQoV1RGOjptb3ZlKHJlc2l6ZUV2ZW50KSk7CiAgICAgfQogCiAgICAgaWYg
KEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkgJiYgaXNNYWluRnJhbWUp
IHsKQEAgLTMzNzcsMTEgKzMzNzcsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZU92ZXJmbG93
U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmYKICAgICAg
ICAgbV9ob3Jpem9udGFsT3ZlcmZsb3cgPSBob3Jpem9udGFsT3ZlcmZsb3c7CiAgICAgICAgIG1f
dmVydGljYWxPdmVyZmxvdyA9IHZlcnRpY2FsT3ZlcmZsb3c7CiAKLSAgICAgICAgUmVmUHRyPE92
ZXJmbG93RXZlbnQ+IG92ZXJmbG93RXZlbnQgPSBPdmVyZmxvd0V2ZW50OjpjcmVhdGUoaG9yaXpv
bnRhbE92ZXJmbG93Q2hhbmdlZCwgaG9yaXpvbnRhbE92ZXJmbG93LAorICAgICAgICBSZWY8T3Zl
cmZsb3dFdmVudD4gb3ZlcmZsb3dFdmVudCA9IE92ZXJmbG93RXZlbnQ6OmNyZWF0ZShob3Jpem9u
dGFsT3ZlcmZsb3dDaGFuZ2VkLCBob3Jpem9udGFsT3ZlcmZsb3csCiAgICAgICAgICAgICB2ZXJ0
aWNhbE92ZXJmbG93Q2hhbmdlZCwgdmVydGljYWxPdmVyZmxvdyk7CiAgICAgICAgIG92ZXJmbG93
RXZlbnQtPnNldFRhcmdldCh2aWV3cG9ydFJlbmRlcmVyLT5lbGVtZW50KCkpOwogCi0gICAgICAg
IGZyYW1lKCkuZG9jdW1lbnQoKS0+ZW5xdWV1ZU92ZXJmbG93RXZlbnQob3ZlcmZsb3dFdmVudC5y
ZWxlYXNlKCkpOworICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmVucXVldWVPdmVyZmxvd0V2
ZW50KFdURjo6bW92ZShvdmVyZmxvd0V2ZW50KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA5M2M3MDZjMDcwNDViYjZiYjllNTRjODk1
YzY1ZDAzNjk2MWY1ZGQ2Li5jNjFjYzhiNjdkMzJlYjNmMjQ2Y2JmNWYxMGNhOWM5NzZmZjhkNzIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE2OSw5ICsx
NjksOSBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghaG9yaXpvbnRhbExheW91dE92ZXJmbG93Q2hh
bmdlZCAmJiAhdmVydGljYWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgUmVmUHRyPE92ZXJmbG93RXZlbnQ+IG92ZXJmbG93RXZlbnQgPSBPdmVy
Zmxvd0V2ZW50OjpjcmVhdGUoaG9yaXpvbnRhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzSG9y
aXpvbnRhbExheW91dE92ZXJmbG93LCB2ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFz
VmVydGljYWxMYXlvdXRPdmVyZmxvdyk7CisgICAgICAgIFJlZjxPdmVyZmxvd0V2ZW50PiBvdmVy
Zmxvd0V2ZW50ID0gT3ZlcmZsb3dFdmVudDo6Y3JlYXRlKGhvcml6b250YWxMYXlvdXRPdmVyZmxv
d0NoYW5nZWQsIGhhc0hvcml6b250YWxMYXlvdXRPdmVyZmxvdywgdmVydGljYWxMYXlvdXRPdmVy
Zmxvd0NoYW5nZWQsIGhhc1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3cpOwogICAgICAgICBvdmVyZmxv
d0V2ZW50LT5zZXRUYXJnZXQobV9ibG9jay0+ZWxlbWVudCgpKTsKLSAgICAgICAgbV9ibG9jay0+
ZG9jdW1lbnQoKS5lbnF1ZXVlT3ZlcmZsb3dFdmVudChvdmVyZmxvd0V2ZW50LnJlbGVhc2UoKSk7
CisgICAgICAgIG1fYmxvY2stPmRvY3VtZW50KCkuZW5xdWV1ZU92ZXJmbG93RXZlbnQoV1RGOjpt
b3ZlKG92ZXJmbG93RXZlbnQpKTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcAppbmRleCAwNzIxMDc2OWZkMDZiYTljZTg3YWM0
NjUyYzk5ZTJjMTc4ZDI4NGYxLi43ZWI1OGEyNmE0OGZmNzBlZmY5ZTVmNTUzZDU2ZTQwOGZiMWYy
MmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKQEAg
LTQ5LDggKzQ5LDggQEAgV29ya2VyRXZlbnRRdWV1ZTo6fldvcmtlckV2ZW50UXVldWUoKQogY2xh
c3MgV29ya2VyRXZlbnRRdWV1ZTo6RXZlbnREaXNwYXRjaGVyCiB7CiBwdWJsaWM6Ci0gICAgRXZl
bnREaXNwYXRjaGVyKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBXb3JrZXJFdmVudFF1ZXVlJiBl
dmVudFF1ZXVlKQotICAgICAgICA6IG1fZXZlbnQoZXZlbnQpCisgICAgRXZlbnREaXNwYXRjaGVy
KFJlZlB0cjxFdmVudD4mJiBldmVudCwgV29ya2VyRXZlbnRRdWV1ZSYgZXZlbnRRdWV1ZSkKKyAg
ICAgICAgOiBtX2V2ZW50KFdURjo6bW92ZShldmVudCkpCiAgICAgICAgICwgbV9ldmVudFF1ZXVl
KGV2ZW50UXVldWUpCiAgICAgICAgICwgbV9pc0NhbmNlbGxlZChmYWxzZSkKICAgICB7CkBAIC02
Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1faXNDYW5jZWxsZWQpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIG1fZXZlbnRRdWV1ZS5tX2V2ZW50RGlzcGF0Y2hlck1hcC5y
ZW1vdmUobV9ldmVudC5nZXQoKSk7Ci0gICAgICAgIG1fZXZlbnQtPnRhcmdldCgpLT5kaXNwYXRj
aEV2ZW50KG1fZXZlbnQpOworICAgICAgICBtX2V2ZW50LT50YXJnZXQoKS0+ZGlzcGF0Y2hFdmVu
dCgqbV9ldmVudCk7CiAgICAgICAgIG1fZXZlbnQgPSBudWxscHRyOwogICAgIH0KIApAQCAtODMs
MTMgKzgzLDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ2FuY2VsbGVkOwogfTsKIAotYm9v
bCBXb3JrZXJFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
Citib29sIFdvcmtlckV2ZW50UXVldWU6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQp
CiB7CiAgICAgaWYgKG1faXNDbG9zZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEV2
ZW50RGlzcGF0Y2hlciogZXZlbnREaXNwYXRjaGVyUHRyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcihl
dmVudC5nZXQoKSwgKnRoaXMpOwotICAgIG1fZXZlbnREaXNwYXRjaGVyTWFwLmFkZChldmVudCwg
ZXZlbnREaXNwYXRjaGVyUHRyKTsKKyAgICBFdmVudERpc3BhdGNoZXIqIGV2ZW50RGlzcGF0Y2hl
clB0ciA9IG5ldyBFdmVudERpc3BhdGNoZXIoZXZlbnQuY29weVJlZigpLCAqdGhpcyk7CisgICAg
bV9ldmVudERpc3BhdGNoZXJNYXAuYWRkKGV2ZW50LnB0cigpLCBldmVudERpc3BhdGNoZXJQdHIp
OwogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5wb3N0VGFzayhbZXZlbnREaXNwYXRjaGVy
UHRyXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEV2ZW50RGlzcGF0Y2hlcj4gZXZlbnREaXNwYXRjaGVyKGV2ZW50RGlzcGF0Y2hlclB0cik7CiAg
ICAgICAgIGV2ZW50RGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJFdmVudFF1ZXVlLmgKaW5kZXggOWEwNTc1NjgxMTkyOTIzMGI0YmVlNTc4MGRlYzg0
MTlkNTVhMjQ3ZS4uM2RiZjMzZGIzOGI3Yzc5MzMxOGRiYmYxZTQ4NDk0ZjA0MjZlY2I3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKQEAgLTM5LDcgKzM5LDcg
QEAgcHVibGljOgogICAgIGV4cGxpY2l0IFdvcmtlckV2ZW50UXVldWUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYpOwogICAgIHZpcnR1YWwgfldvcmtlckV2ZW50UXVldWUoKTsKIAotICAgIHZpcnR1
YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgY2FuY2VsRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2UoKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKaW5kZXggYWIxNzA4ZmU0NDI1
ZDAxZjY1MTU4MzkzMzU0N2Q5YzljN2RiNmUxZC4uYzNlMTUzOGI0MjZjZTM1NjU4YzA4YjMxMmQ4
ZmM5MTkwNTk5MGE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCkBAIC04MSwyNSArODEsMjQgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hUaHJvdHRs
ZWRQcm9ncmVzc0V2ZW50KGJvb2wgbGUKICAgICBtX2hhc1Rocm90dGxlZFByb2dyZXNzRXZlbnQg
PSB0cnVlOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpk
aXNwYXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVudChSZWZQdHI8RXZlbnQ+JiYgZXZlbnQsIFByb2dy
ZXNzRXZlbnRBY3Rpb24gcHJvZ3Jlc3NFdmVudEFjdGlvbikKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KEV2ZW50
JiBldmVudCwgUHJvZ3Jlc3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2ZW50QWN0aW9uKQogewogICAg
IGlmIChwcm9ncmVzc0V2ZW50QWN0aW9uID09IEZsdXNoUHJvZ3Jlc3NFdmVudCkKICAgICAgICAg
Zmx1c2hQcm9ncmVzc0V2ZW50KCk7CiAKLSAgICBkaXNwYXRjaEV2ZW50KFdURjo6bW92ZShldmVu
dCkpOworICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaEV2ZW50KFJlZlB0cjxFdmVudD4mJiBldmVu
dCkKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZl
bnQoRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChldmVudCk7CiAgICAgaWYgKG1fZGVmZXJF
dmVudHMpIHsKLSAgICAgICAgaWYgKG1fZGVmZXJyZWRFdmVudHMuc2l6ZSgpID4gMSAmJiBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5yZWFkeXN0YXRlY2hhbmdlRXZlbnQgJiYgZXZlbnQt
PnR5cGUoKSA9PSBtX2RlZmVycmVkRXZlbnRzLmxhc3QoKS0+dHlwZSgpKSB7CisgICAgICAgIGlm
IChtX2RlZmVycmVkRXZlbnRzLnNpemUoKSA+IDEgJiYgZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5yZWFkeXN0YXRlY2hhbmdlRXZlbnQgJiYgZXZlbnQudHlwZSgpID09IG1fZGVmZXJyZWRF
dmVudHMubGFzdCgpLT50eXBlKCkpIHsKICAgICAgICAgICAgIC8vIFJlYWR5c3RhdGVjaGFuZ2Ug
ZXZlbnRzIGFyZSBzdGF0ZS1sZXNzIHNvIGF2b2lkIHJlcGVhdGluZyB0d28gaWRlbnRpY2FsIGV2
ZW50cyBpbiBhIHJvdyBvbiByZXN1bWUuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2ZW50KSk7CisgICAg
ICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKICAgICB9IGVsc2UKLSAgICAgICAg
bV90YXJnZXQtPmRpc3BhdGNoRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CisgICAgICAgIG1fdGFy
Z2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSkKQEAgLTEyMCw4ICsxMTksNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudFRocm90dGxlOjpmbHVzaFByb2dyZXNzRXZlbnQoKQogewogICAgIGlmIChtX2RlZmVyRXZl
bnRzICYmIG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50KSB7CiAgICAgICAgIC8vIE1vdmUgdGhlIHBy
b2dyZXNzIGV2ZW50IHRvIHRoZSBxdWV1ZSwgdG8gZ2V0IGl0IGluIHRoZSByaWdodCBvcmRlciBv
biByZXN1bWUuCi0gICAgICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKG1fZGVmZXJyZWRQcm9n
cmVzc0V2ZW50KTsKLSAgICAgICAgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBudWxscHRyOwor
ICAgICAgICBtX2RlZmVycmVkRXZlbnRzLmFwcGVuZChtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudC5y
ZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTQ0LDE2ICsx
NDIsMTUgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0
Y2hEZWZlcnJlZEV2ZW50cygpCiAgICAgLy8gVGFrZSBvdmVyIHRoZSBkZWZlcnJlZCBldmVudHMg
YmVmb3JlIGRpc3BhdGNoaW5nIHRoZW0gd2hpY2ggY2FuIHBvdGVudGlhbGx5IGFkZCBtb3JlLgog
ICAgIGF1dG8gZGVmZXJyZWRFdmVudHMgPSBXVEY6Om1vdmUobV9kZWZlcnJlZEV2ZW50cyk7CiAK
LSAgICBSZWZQdHI8RXZlbnQ+IGRlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IG1fZGVmZXJyZWRQcm9n
cmVzc0V2ZW50OwotICAgIG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50ID0gbnVsbHB0cjsKKyAgICBS
ZWZQdHI8RXZlbnQ+IGRlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IFdURjo6bW92ZShtX2RlZmVycmVk
UHJvZ3Jlc3NFdmVudCk7CiAKICAgICBmb3IgKGF1dG8mIGRlZmVycmVkRXZlbnQgOiBkZWZlcnJl
ZEV2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hFdmVudChkZWZlcnJlZEV2ZW50LnJlbGVhc2UoKSk7
CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZGVmZXJyZWRFdmVudCk7CiAKICAgICAvLyBUaGUgcHJv
Z3Jlc3MgZXZlbnQgd2lsbCBiZSBpbiB0aGUgbV9kZWZlcnJlZEV2ZW50cyB2ZWN0b3IgaWYgdGhl
IGxvYWQgd2FzIGZpbmlzaGVkIHdoaWxlIHN1c3BlbmRlZC4KICAgICAvLyBJZiBub3QsIGp1c3Qg
c2VuZCB0aGUgbW9zdCB1cC10by1kYXRlIHByb2dyZXNzIG9uIHJlc3VtZS4KICAgICBpZiAoZGVm
ZXJyZWRQcm9ncmVzc0V2ZW50KQotICAgICAgICBkaXNwYXRjaEV2ZW50KFdURjo6bW92ZShkZWZl
cnJlZFByb2dyZXNzRXZlbnQpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqZGVmZXJyZWRQcm9n
cmVzc0V2ZW50KTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRs
ZTo6ZmlyZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaAppbmRleCAyOWY0ZDY1NWQ4M2QxNmY2MTcwZmQ1NTg3
NTZkNWE3NjE5NTA0ZjAyLi5jMTAwOWU1MGRiOTA4Y2E0MzNjZTQ1ZGY1M2ZlNTA3NGVmYTc3NjA5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50VGhyb3R0bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGUuaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUoKTsKIAogICAgIHZvaWQgZGlz
cGF0Y2hUaHJvdHRsZWRQcm9ncmVzc0V2ZW50KGJvb2wgbGVuZ3RoQ29tcHV0YWJsZSwgdW5zaWdu
ZWQgbG9uZyBsb25nIGxvYWRlZCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsKTsKLSAgICB2b2lk
IGRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KFJlZlB0cjxFdmVudD4mJiwgUHJvZ3Jlc3NF
dmVudEFjdGlvbiA9IERvTm90Rmx1c2hQcm9ncmVzc0V2ZW50KTsKKyAgICB2b2lkIGRpc3BhdGNo
UmVhZHlTdGF0ZUNoYW5nZUV2ZW50KEV2ZW50JiwgUHJvZ3Jlc3NFdmVudEFjdGlvbiA9IERvTm90
Rmx1c2hQcm9ncmVzc0V2ZW50KTsKICAgICB2b2lkIGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmKTsKIAogICAgIHZvaWQgc3VzcGVuZCgpOwpAQCAtNjEsNyArNjEsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpOwogICAgIHZvaWQgZGlzcGF0Y2hE
ZWZlcnJlZEV2ZW50cygpOwogICAgIHZvaWQgZmx1c2hQcm9ncmVzc0V2ZW50KCk7Ci0gICAgdm9p
ZCBkaXNwYXRjaEV2ZW50KFJlZlB0cjxFdmVudD4mJik7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50
KEV2ZW50Jik7CiAKICAgICBib29sIGhhc0V2ZW50VG9EaXNwYXRjaCgpIGNvbnN0OwogCkBAIC03
NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZGVmZXJFdmVudHM7CiAgICAgUmVm
UHRyPEV2ZW50PiBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudDsKLSAgICBWZWN0b3I8UmVmUHRyPEV2
ZW50Pj4gbV9kZWZlcnJlZEV2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9kZWZlcnJl
ZEV2ZW50czsKICAgICBUaW1lciBtX2Rpc3BhdGNoRGVmZXJyZWRFdmVudHNUaW1lcjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265326</attachid>
            <date>2015-11-11 16:06:08 -0800</date>
            <delta_ts>2015-11-11 16:16:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151158-20151111160602.patch</filename>
            <type>text/plain</type>
            <size>117033</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTI1YWNjZjRkMzZlOTdh
NzFiZDc1ZDM1OWJmNTE3MTllZTA0Y2JlOC4uMGJmMzVmYjhlODMwMTcyYWM3NTEyM2UyY2FkNTQz
M2I2YzNjMzBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFz
c1JlZlB0ciB0byBkaXNwYXRjaEV2ZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFN0b3AgcGFzc2luZyBhIFBhc3NSZWZQdHIgdG8gZGlzcGF0Y2hF
dmVudCgpIGJlY2F1c2U6CisgICAgICAgIDEuIFBhc3NSZWZQdHIgaXMgbGVnYWN5IGFuZCBzaG91
bGQgbm8gbG9uZ2VyIGJlIHVzZWQKKyAgICAgICAgMi4gV2UgZG9uJ3QgYWN0dWFsbHkgdHJhbnNm
ZXIgb3duZXJzaGlwIG9mIHRoZSBFdmVudCB0byB0aGUgY2FsbGVlCisKKyAgICAgICAgUGFzcyBh
IEMrKyByZWZlcmVuY2UgaW5zdGVhZC4KKwogMjAxNS0xMS0xMCAgSm9uIEhvbmV5Y3V0dCAgPGpo
b25leWN1dHRAYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGxvYWRpbmcgQmxpbmsgbGF5b3V0
IHRlc3QgZmFzdC9wYXJzZXIvc3RyaXAtc2NyaXB0LWF0dHJzLW9uLWlucHV0Lmh0bWwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3Bw
CmluZGV4IGNmODJhMzU1MjljZTMwODA3ZDE2OTA2OWU1ZDdhZmNiOGE0MWJkOWUuLjI1MjE1Yzk3
MDQ2Y2U5ZmUyYmZhYjFlMGI0ZDAxZDE0YWIxMzViOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcApAQCAtODQsNyArODQs
NyBAQCB2b2lkIEJhdHRlcnlDb250cm9sbGVyOjp1cGRhdGVCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQ
dHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YQogCiB2b2lkIEJhdHRlcnlDb250cm9sbGVyOjpk
aWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMpCiB7Ci0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpOworICAgIFJl
ZjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsK
ICAgICBSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeSA9IGJhdHRlcnlTdGF0dXM7CiAgICAg
Zm9yIChhdXRvJiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzKQogICAgICAgICBsaXN0ZW5lci0+ZGlk
Q2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudCwgYmF0dGVyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcAppbmRleCAzYzFlYTc3NDU2ZjRk
MmE5Njc3N2U0OWRjNjUwMTE0YTI4NjY1ZjYyLi5kNmQxODBlODU1NjBhY2QzZjdjNzljYjU1Nzc0
YTgwNDEwNzljMmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9C
YXR0ZXJ5TWFuYWdlci5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgZG91YmxlIEJhdHRlcnlNYW5hZ2Vy
OjpsZXZlbCgpCiAgICAgcmV0dXJuIG1fYmF0dGVyeVN0YXR1cyA/IG1fYmF0dGVyeVN0YXR1cy0+
bGV2ZWwoKSA6IDE7CiB9CiAKLXZvaWQgQmF0dGVyeU1hbmFnZXI6OmRpZENoYW5nZUJhdHRlcnlT
dGF0dXMoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4g
YmF0dGVyeVN0YXR1cykKK3ZvaWQgQmF0dGVyeU1hbmFnZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0
dXMoRXZlbnQmIGV2ZW50LCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMp
CiB7CiAgICAgdXBkYXRlQmF0dGVyeVN0YXR1cyhiYXR0ZXJ5U3RhdHVzKTsKICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVy
eS9CYXR0ZXJ5TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRl
cnlNYW5hZ2VyLmgKaW5kZXggNzlhMDFmOTM2OWIwNjM5ODhmNmJjMjdjNjk2OGM3NTU0ZThjZGRh
Zi4uZDRlM2QyNjE1ZTI2MTIwODQ3MDVhZDYyYjUxY2I1MzJhMDhjMjkwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUoKTsKICAgICBkb3VibGUg
bGV2ZWwoKTsKIAotICAgIHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEV2
ZW50PiwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CisgICAgdm9pZCBkaWRDaGFuZ2VCYXR0
ZXJ5U3RhdHVzKEV2ZW50JiwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CiAgICAgdm9pZCB1
cGRhdGVCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOwogICAgIHZvaWQg
YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKSB7IG1fYmF0dGVyeUNvbnRyb2xsZXIgPSBudWxs
cHRyOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkV2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGI4OGVkZTU4ZDgxZTQwNmM4MDJlNTNlOGE0MTg3
NDliZDEzMzdhOTkuLmY4MWYzNjU4MmQ3ZGJmZjUyNWU4Y2U4N2I5ZjA1NzM4MjcxYjQ4MWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0
Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnRE
aXNwYXRjaGVyLmNwcApAQCAtMzYsMzAgKzM2LDMwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50KiBldmVudCwgVmVjdG9y
PFJlZlB0cjxFdmVudFRhcmdldD4+JiBldmVudFRhcmdldHMpCitib29sIElEQkV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2goRXZlbnQmIGV2ZW50LCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4m
IGV2ZW50VGFyZ2V0cykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IGV2ZW50VGFyZ2V0cy5zaXplKCk7
CiAgICAgQVNTRVJUKHNpemUpOwogCi0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNB
UFRVUklOR19QSEFTRSk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5H
X1BIQVNFKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6ZSAtIDE7IGk7IC0taSkgeyAvLyBEb24n
dCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQo
ZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChl
dmVudFRhcmdldHNbaV0uZ2V0KCkpOwogICAgICAgICBldmVudFRhcmdldHNbaV0tPmZpcmVFdmVu
dExpc3RlbmVycyhldmVudCk7Ci0gICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVk
KCkpCisgICAgICAgIGlmIChldmVudC5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgICAg
IGdvdG8gZG9uZURpc3BhdGNoaW5nOwogICAgIH0KIAotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNl
KEV2ZW50OjpBVF9UQVJHRVQpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFy
Z2V0c1swXS5nZXQoKSk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VU
KTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1swXS5nZXQoKSk7CiAg
ICAgZXZlbnRUYXJnZXRzWzBdLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwotICAgIGlmIChl
dmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgIWV2ZW50LT5idWJibGVzKCkgfHwgZXZlbnQt
PmNhbmNlbEJ1YmJsZSgpKQorICAgIGlmIChldmVudC5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAh
ZXZlbnQuYnViYmxlcygpIHx8IGV2ZW50LmNhbmNlbEJ1YmJsZSgpKQogICAgICAgICBnb3RvIGRv
bmVEaXNwYXRjaGluZzsKIAotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElO
R19QSEFTRSk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0Up
OwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7IC8vIERvbid0IGRvIHRo
ZSBmaXJzdCBlbGVtZW50LgotICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChldmVudFRh
cmdldHNbaV0uZ2V0KCkpOworICAgICAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFy
Z2V0c1tpXS5nZXQoKSk7CiAgICAgICAgIGV2ZW50VGFyZ2V0c1tpXS0+ZmlyZUV2ZW50TGlzdGVu
ZXJzKGV2ZW50KTsKLSAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBl
dmVudC0+Y2FuY2VsQnViYmxlKCkpCisgICAgICAgIGlmIChldmVudC5wcm9wYWdhdGlvblN0b3Bw
ZWQoKSB8fCBldmVudC5jYW5jZWxCdWJibGUoKSkKICAgICAgICAgICAgIGdvdG8gZG9uZURpc3Bh
dGNoaW5nOwogICAgIH0KIApAQCAtODIsOSArODIsOSBAQCBib29sIElEQkV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2goRXZlbnQqIGV2ZW50LCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4mIGV2
ZQogICAgIC8vICAgICAgICBldmVudCBvbiB0aGUgd2luZG93IHVudGlsIHRoYXQgaGFzIGJlZW4g
aW1wbGVtZW50ZWQpLiIgLS0gSm9uYXMgU2lja2luZwogCiBkb25lRGlzcGF0Y2hpbmc6Ci0gICAg
ZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQobnVsbHB0cik7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoMCk7Ci0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIGV2ZW50
LnNldEN1cnJlbnRUYXJnZXQobnVsbHB0cik7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsK
KyAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuaAppbmRleCBhNDYzOTNlZDg2YzRhNjFlNTY5NjQ1Yzk2YzkxYzU1
MDgyNjRlZmZmLi5lZDU5NTk3NWFjYjY1YWQ2NzJmNTI4OTlhZDAyZjNhZjNmMzM1MDA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNo
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3Bh
dGNoZXIuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBFdmVudFRhcmdldDsKIAogY2xhc3MgSURC
RXZlbnREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaChFdmVu
dCosIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFu
ZCB0aGVuIGl0cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgor
ICAgIHN0YXRpYyBib29sIGRpc3BhdGNoKEV2ZW50JiwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdl
dD4+Jik7IC8vIFRoZSB0YXJnZXQgZmlyc3QgYW5kIHRoZW4gaXRzIGFuY2VzdG9ycyBpbiBvcmRl
ciBvZiBob3cgdGhlIGV2ZW50IGJ1YmJsZXMuCiAKIHByaXZhdGU6CiAgICAgSURCRXZlbnREaXNw
YXRjaGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCmluZGV4IGRiZTAwMGY1NzE0YWUyODhmMDYz
NDgyM2VjNjM1ZmYxODQ0YzgxYjMuLjYxYjE3N2M4OTg4ZmQ3NjNmZWQ4MjI0MThkMTMwZjY5OTU0
Mjc5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJEYXRhYmFzZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBJ
REJEYXRhYmFzZTo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCByZXF1ZXN0ZWRWZXJz
aW9uKQogICAgIAogICAgIFJlZjxFdmVudD4gZXZlbnQgPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6
OmNyZWF0ZShjdXJyZW50VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbiwgZXZlbnROYW1lcygpLnZl
cnNpb25jaGFuZ2VFdmVudCk7CiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoYWRvcHRSZWYo
JmV2ZW50LmxlYWtSZWYoKSkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRR
dWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZTo6ZGlkQ3JlYXRlSW5kZXhJbmZvKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVx
dWVzdEltcGwuY3BwCmluZGV4IDc1Yjk2NWQ5MGQwMTllMGY1NjhjNDNjN2ZkOGY5NWMxMWM5ZWVl
ZWMuLjk4YWVhZDVlOWQxNWZhMTZmYWE2N2FmOGIxMzI2MWZhY2UyZjlmYzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVl
c3RJbXBsLmNwcApAQCAtMTk0LDE2ICsxOTQsMTQgQEAgdm9pZCBJREJSZXF1ZXN0OjplbnF1ZXVl
RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBldmVudC0+
c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpLmVucXVldWVFdmVudCgmZXZlbnQuZ2V0KCkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAot
Ym9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50
KQorYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCAtICVzIiwgcHJwRXZlbnQt
PnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6
ZGlzcGF0Y2hFdmVudCAtICVzIiwgZXZlbnQudHlwZSgpLmNoYXJhY3RlcnM4KCkpOwogCi0gICAg
UmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkg
IT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpICE9IGV2
ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCiAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVl
c3RSZWFkeVN0YXRlOjpEb25lOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRh
cmdldHM7CkBAIC0yMTcsNyArMjE1LDcgQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgIGJvb2wgZG9udFByZXZlbnREZWZhdWx0
OwogICAgIHsKICAgICAgICAgVHJhbnNhY3Rpb25BY3RpdmF0b3IgYWN0aXZhdG9yKG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOwotICAgICAgICBkb250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKyAgICAgICAgZG9udFByZXZl
bnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudCwgdGFyZ2V0cyk7
CiAgICAgfQogCiAgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSBmYWxzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBs
LmgKaW5kZXggYTQyYjE3YjQ0M2M0MWM4M2NhOGVmOWQ2ZWQ0MDIzMzhmNDI2OTJjOC4uMjkwZTM5
YzViZDNjOTZjNjE4YzU5OGZmODQwODQwMDUzZmMwM2Y0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmgKQEAg
LTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD46
OmRlcmVmOwogCiAgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGUgZmluYWw7
CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZSBmaW5hbDsK
IAogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29u
bmVjdGlvbjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCmluZGV4IDBkYzFjNGY1OGU0
NjIyOWVjMTdiNTE1YjAxYjMxZDYyYmU0NmMwNjAuLjRhNDcxOTRjMzQ5OTkzOTBhN2M5N2JhZjQy
M2JlNGU3YTlkMTBmZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC0zNDYsNyAr
MzQ2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZmlyZU9uQWJvcnQoKQogICAgIGVucXVldWVF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxzZSkp
OwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiBldmVu
dCkKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQp
CiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpG
aW5pc2hlZCk7CiAKQEAgLTM1NCwyMiArMzU0LDIyIEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmVu
cXVldWVFdmVudChSZWY8RXZlbnQ+IGV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBldmVu
dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRR
dWV1ZSgpLmVucXVldWVFdmVudCgmZXZlbnQuZ2V0KCkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKIH0K
IAotYm9vbCBJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK2Jvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQog
ewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOwog
CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50
LT50YXJnZXQoKSA9PSB0aGlzKTsKLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50KTsKKyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJU
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFdmVu
dFRhcmdldD4+IHRhcmdldHM7CiAgICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7CiAgICAgdGFyZ2V0
cy5hcHBlbmQoZGIoKSk7CiAKLSAgICByZXR1cm4gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aChldmVudC5nZXQoKSwgdGFyZ2V0cyk7CisgICAgcmV0dXJuIElEQkV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogfQogCiBSZWY8SURCT2JqZWN0U3RvcmU+IElEQlRy
YW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGlu
Zm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCVHJhbnNhY3Rpb25JbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKaW5kZXggYjNkN2IzY2MzNjZkNThhYTdhNDRhMThk
MzJhNzc2OWRiNmU3ZDUxYy4uMDQzNjE5NTkwYzI2NzE0MWEwNzczNWQ1YzFkN2IxOTEwMjc2OTM3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QlRyYW5zYWN0aW9uSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyByZWYoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyBk
ZXJlZigpOyB9CiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmly
dHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlIGZpbmFs
OworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGUgZmluYWw7
CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBv
dmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgp
IGNvbnN0IG92ZXJyaWRlIGZpbmFsOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGZpcmVPbkNvbXBsZXRlKCk7CiAgICAgdm9pZCBmaXJlT25BYm9ydCgpOwotICAgIHZv
aWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxF
dmVudD4mJik7CiAKICAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEluZGV4UmVjb3JkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBl
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5jcHAKaW5kZXggYjAx
NGU2NjIxZDIwZDExM2MxYzcxNGMzMWE3MWQ5NmY4MzFmODQyZC4uZDAzZjEyOGNkMzExZWQyMjli
ZGMzNGM3YzAxZTVjZTBlMTFiNjdjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3BwCkBAIC05Miw3ICs5
Miw3IEBAIExlZ2FjeURhdGFiYXNlOjp+TGVnYWN5RGF0YWJhc2UoKQogICAgICAgICAvLyBjb25u
ZWN0aW9uIGNhbGxlZCBzZXRWZXJzaW9uLCBidXQgdGhlIGZyb250ZW5kIGNvbm5lY3Rpb24gaXMg
YmVpbmcKICAgICAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCiAgICAgICAg
IGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKQotICAgICAgICAgICAgY29udGV4
dC0+ZXZlbnRRdWV1ZSgpLmNhbmNlbEV2ZW50KCpldmVudCk7CisgICAgICAgICAgICBjb250ZXh0
LT5ldmVudFF1ZXVlKCkuY2FuY2VsRXZlbnQoZXZlbnQpOwogICAgIH0KIH0KIApAQCAtMzIxLDcg
KzMyMSw3IEBAIHZvaWQgTGVnYWN5RGF0YWJhc2U6OmNsb3NlQ29ubmVjdGlvbigpCiAgICAgLy8g
Y29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9udGVuZCBjb25uZWN0aW9u
IGlzIGJlaW5nCiAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCiAgICAgZm9y
IChhdXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKLSAgICAgICAgYm9vbCByZW1vdmVk
ID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOworICAgICAgICBib29sIHJlbW92ZWQg
PSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZW1vdmVkLCByZW1vdmVkKTsKICAgICB9CiAKQEAgLTM0MSwyNSArMzQxLDI1IEBAIHZvaWQgTGVn
YWN5RGF0YWJhc2U6Om9uVmVyc2lvbkNoYW5nZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRf
dCBuZXdWZXJzaW9uKQogICAgIGVucXVldWVFdmVudChMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQ6
OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5n
ZUV2ZW50KSk7CiB9CiAKLXZvaWQgTGVnYWN5RGF0YWJhc2U6OmVucXVldWVFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OmVucXVldWVFdmVudChSZWY8
RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKICAgICBB
U1NFUlQoIW1faXNDbG9zZWQpOwogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmdldCgpKTsKLSAgICBtX2VucXVl
dWVkRXZlbnRzLmFwcGVuZChldmVudCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5l
dmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmNvcHlSZWYoKSk7CisgICAgbV9lbnF1ZXVl
ZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgTGVnYWN5RGF0YWJh
c2U6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeURh
dGFiYXNlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coU3RvcmFnZUFQ
SSwgIkxlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNTRVJUKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7CisgICAgQVNTRVJUKGV2
ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50KTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0KCkpCisgICAgICAg
IGlmIChtX2VucXVldWVkRXZlbnRzW2ldLnB0cigpID09ICZldmVudCkKICAgICAgICAgICAgIG1f
ZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwogICAgIH0KLSAgICByZXR1cm4gRXZlbnRUYXJnZXQ6
OmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIHJldHVybiBFdmVudFRhcmdldDo6ZGlz
cGF0Y2hFdmVudChldmVudCk7CiB9CiAKIGludDY0X3QgTGVnYWN5RGF0YWJhc2U6OmZpbmRPYmpl
Y3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKaW5kZXgg
MTEzN2U1ZTMwMDI0NDE4MWUyMThlNDlmM2Q1N2JiN2NkNThlNjc3ZC4uZWExZWI1ZjIzZGEwZjU2
NmQ5NjMzNjhhNjhiYzMxYWY0NGZkYjI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKQEAgLTg0LDEwICs4
NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Nsb3NlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fY2xvc2VQZW5kaW5nOyB9CiAgICAgdm9pZCBmb3JjZUNsb3NlKCk7CiAgICAgY29uc3QgSURC
RGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0K
LSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBlbnF1
ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJy
aWRlOwogCiAgICAgaW50NjRfdCBmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0CkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEtlZXAgdHJhY2sg
b2YgdGhlIHZlcnNpb25jaGFuZ2UgZXZlbnRzIHdhaXRpbmcgdG8gYmUgZmlyZWQgb24gdGhpcwog
ICAgIC8vIGRhdGFiYXNlIHNvIHRoYXQgd2UgY2FuIGNhbmNlbCB0aGVtIGlmIHRoZSBkYXRhYmFz
ZSBjbG9zZXMuCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7Cisg
ICAgVmVjdG9yPFJlZjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7CiAKICAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVl
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9w
ZW5EQlJlcXVlc3QuY3BwCmluZGV4IDMyOTBjNTBmMDQyZTkwZWYyZWFiYTcyNzU4MGU3MjM5MzQ4
MjY1NmQuLjcyMTdiYzNlNGRhNzJiYzZiNGM3NmVlZDk1YWY3NzE1YzQ2MWFkNmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJS
ZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKQEAgLTEzOCwxMSArMTM4LDExIEBAIGJvb2wgTGVnYWN5
T3BlbkRCUmVxdWVzdDo6c2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3QKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KEV2ZW50JiBldmVudCkKIHsKICAgICAvLyBJZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgYmV0d2Vl
biBvblVwZ3JhZGVOZWVkZWQgYW5kIHRoZSBkZWxpdmVyeSBvZiB0aGUgInN1Y2Nlc3MiIGV2ZW50
LAogICAgIC8vIGFuICJlcnJvciIgZXZlbnQgc2hvdWxkIGJlIGZpcmVkIGluc3RlYWQuCi0gICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCAmJiBtX3Jlc3Vs
dC0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCRGF0YWJhc2UgJiYgbV9yZXN1bHQtPmxlZ2Fj
eURhdGFiYXNlKCktPmlzQ2xvc2VQZW5kaW5nKCkpIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgJiYgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6
OlR5cGU6OklEQkRhdGFiYXNlICYmIG1fcmVzdWx0LT5sZWdhY3lEYXRhYmFzZSgpLT5pc0Nsb3Nl
UGVuZGluZygpKSB7CiAgICAgICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgb25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJy
b3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeU9wZW5EQlJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmgKaW5kZXggNWE1OTNiNWY2ZWFjNzBkYjdkMzAyYjA2
ZTg5Y2ViZTM4NDhkZTQ1Zi4uNjRmNjZjNDBiMDc4MzM1NjcxYTNhYjhkYjhiOWRlN2JkY2FjYmFh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeU9wZW5EQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoK
IAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwg
Ym9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZSBmaW5hbDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJyaWRlIGZpbmFsOwogCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEVucXVldWVFdmVudCgpIGNvbnN0IG92
ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCmluZGV4IGEzYzIwMjBiMDAwYjczNGVkNmNhN2EzM2Vl
Mzk2ZWQ4OGE4ZWU1MWMuLjJjNzQ3YTU2YWFhZDUzY2Y3ZDRkM2EzZGQwODRmOGQ1ZjMyYTlhZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdh
Y3lSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5UmVxdWVzdC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIExlZ2FjeVJlcXVl
c3Q6OmFib3J0KCkKIAogICAgIEV2ZW50UXVldWUmIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1
ZXVlZEV2ZW50cykgewotICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2
ZW50KCpldmVudCk7CisgICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZl
bnQoZXZlbnQpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogICAg
IH0KICAgICBtX2VucXVldWVkRXZlbnRzLmNsZWFyKCk7CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9p
ZCBMZWdhY3lSZXF1ZXN0OjpvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IpCiAgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZl
bnQsIHRydWUsIHRydWUpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZVN1
Y2Nlc3NFdmVudCgpCitzdGF0aWMgUmVmPEV2ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQogewog
ICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNl
LCBmYWxzZSk7CiB9CkBAIC00NjYsNyArNDY2LDcgQEAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgTGVn
YWN5UmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogICAgIHJldHVybiBJREJS
ZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCi1ib29sIExlZ2FjeVJlcXVlc3Q6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeVJlcXVl
c3Q6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIExPRyhTdG9yYWdlQVBJLCAi
TGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCIpOwogICAgIEFTU0VSVChtX3JlYWR5U3RhdGUg
PT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRpbmcpOwpAQCAtNDc0LDE2ICs0NzQsMTYgQEAg
Ym9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQogICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CiAgICAgQVNTRVJUKG1fZW5xdWV1
ZWRFdmVudHMuc2l6ZSgpKTsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
LSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpID09IHRoaXMpOwotICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UobV9yZWFkeVN0YXRlIDwgSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUsICJXaGVuIGRp
c3BhdGNoaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgPCBET05FKCVkKSwgd2FzICVkIiwgZXZl
bnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KElEQlJl
cXVlc3RSZWFkeVN0YXRlOjpEb25lKSwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5U3RhdGUpKTsK
KyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX3JlYWR5U3RhdGUgPCBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSwgIldoZW4gZGlz
cGF0Y2hpbmcgZXZlbnQgJXMsIG1fcmVhZHlTdGF0ZSA8IERPTkUoJWQpLCB3YXMgJWQiLCBldmVu
dC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihJREJSZXF1
ZXN0UmVhZHlTdGF0ZTo6RG9uZSksIHN0YXRpY19jYXN0PGludD4obV9yZWFkeVN0YXRlKSk7CiAK
ICAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsKIAotICAg
IGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgaWYg
KGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQogICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
bV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVudC5nZXQoKSkKKyAgICAgICAgaWYgKG1f
ZW5xdWV1ZWRFdmVudHNbaV0ucHRyKCkgPT0gJmV2ZW50KQogICAgICAgICAgICAgbV9lbnF1ZXVl
ZEV2ZW50cy5yZW1vdmUoaSk7CiAgICAgfQogCkBAIC01MDAsNyArNTAwLDcgQEAgYm9vbCBMZWdh
Y3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAg
Ly8gQ3Vyc29yIHByb3BlcnRpZXMgc2hvdWxkIG5vdCB1cGRhdGVkIHVudGlsIHRoZSBzdWNjZXNz
IGV2ZW50IGlzIGJlaW5nIGRpc3BhdGNoZWQuCiAgICAgUmVmUHRyPExlZ2FjeUN1cnNvcj4gY3Vy
c29yVG9Ob3RpZnk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NF
dmVudCkgewogICAgICAgICBjdXJzb3JUb05vdGlmeSA9IGdldFJlc3VsdEN1cnNvcigpOwogICAg
ICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpIHsKICAgICAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5z
ZXRWYWx1ZVJlYWR5KHJlcXVlc3RTdGF0ZSgpLCBtX2N1cnNvcktleS5yZWxlYXNlKCksIG1fY3Vy
c29yUHJpbWFyeUtleS5yZWxlYXNlKCksIG1fY3Vyc29yVmFsdWUpOwpAQCAtNTA4LDE5ICs1MDgs
MTkgQEAgYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50KQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkgewogICAgICAgICBBU1NFUlQoIW1fZGlk
RmlyZVVwZ3JhZGVOZWVkZWRFdmVudCk7CiAgICAgICAgIG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRF
dmVudCA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9t
IGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCi0g
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgfHwgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50LCAiZXZlbnQgdHlwZSB3YXMgJXMi
LCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGNvbnN0IGJvb2wg
c2V0VHJhbnNhY3Rpb25BY3RpdmUgPSBtX3RyYW5zYWN0aW9uICYmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkudXBncmFkZW5lZWRlZEV2ZW50IHx8IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50ICYmIG1fZXJyb3JDb2RlICE9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVy
cm9yKSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShldmVudC50eXBlKCkgPT0gZXZlbnROYW1l
cygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZl
bnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgfHwgZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQsICJldmVudCB0eXBlIHdh
cyAlcyIsIGV2ZW50LnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBjb25zdCBi
b29sIHNldFRyYW5zYWN0aW9uQWN0aXZlID0gbV90cmFuc2FjdGlvbiAmJiAoZXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQgfHwgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
ZXJyb3JFdmVudCAmJiBtX2Vycm9yQ29kZSAhPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRF
cnJvcikpOwogCiAgICAgaWYgKHNldFRyYW5zYWN0aW9uQWN0aXZlKQogICAgICAgICBtX3RyYW5z
YWN0aW9uLT5zZXRBY3RpdmUodHJ1ZSk7CiAKLSAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdCA9
IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAg
IGJvb2wgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChl
dmVudCwgdGFyZ2V0cyk7CiAKICAgICBpZiAobV90cmFuc2FjdGlvbikgewogICAgICAgICBpZiAo
bV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKQpAQCAtNTI4LDcgKzUy
OCw3IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKIAogICAgICAgICAvLyBQb3NzaWJseSBhYm9ydCB0aGUgdHJhbnNhY3Rpb24uIFRo
aXMgbXVzdCBvY2N1ciBhZnRlciB1bnJlZ2lzdGVyaW5nIChzbyB0aGlzIHJlcXVlc3QKICAgICAg
ICAgLy8gZG9lc24ndCByZWNlaXZlIGEgc2Vjb25kIGVycm9yKSBhbmQgYmVmb3JlIGRlYWN0aXZh
dGluZyAod2hpY2ggbWlnaHQgdHJpZ2dlciBjb21taXQpLgotICAgICAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBkb250UHJldmVudERlZmF1bHQgJiYg
IW1fcmVxdWVzdEFib3J0ZWQpIHsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuZXJyb3JFdmVudCAmJiBkb250UHJldmVudERlZmF1bHQgJiYgIW1fcmVxdWVzdEFib3J0
ZWQpIHsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEVycm9yKG1fZXJyb3IsIG1fZXJy
b3JNZXNzYWdlKTsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENF
UFRJT04pOwogICAgICAgICB9CkBAIC01NDEsNyArNTQxLDcgQEAgYm9vbCBMZWdhY3lSZXF1ZXN0
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIGlmIChjdXJzb3JU
b05vdGlmeSkKICAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnBvc3RTdWNjZXNzSGFuZGxlckNhbGxi
YWNrKCk7CiAKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpE
b25lICYmICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JGaW5pc2hlZCkgJiYgZXZlbnQtPnR5
cGUoKSAhPSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KQorICAgIGlmIChtX3JlYWR5
U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUgJiYgKCFjdXJzb3JUb05vdGlmeSB8
fCBtX2N1cnNvckZpbmlzaGVkKSAmJiBldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLnVwZ3Jh
ZGVuZWVkZWRFdmVudCkKICAgICAgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSBmYWxzZTsKIAog
ICAgIHJldHVybiBkb250UHJldmVudERlZmF1bHQ7CkBAIC01NjUsNyArNTY1LDcgQEAgdm9pZCBM
ZWdhY3lSZXF1ZXN0Ojp0cmFuc2FjdGlvbkRpZEZpbmlzaEFuZERpc3BhdGNoKCkKICAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZzsKIH0KIAotdm9pZCBMZWdh
Y3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIExl
Z2FjeVJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZyB8fCBtX3Jl
YWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpOwogCkBAIC01NzYsOCArNTc2
LDggQEAgdm9pZCBMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCiAKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwogCi0gICAgaWYgKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5nZXQoKSkp
Ci0gICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKKyAgICBpZiAoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmNvcHlS
ZWYoKSkpCisgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaAppbmRleCA1YWVmYjEx
ZDIyODJjNzc4MWZhNmY5ZDY4NjdlNjg4NTZmNTc5ODMxLi5lYjFmYmFlZjJhZTYyNjVlMzIxN2Ji
YWNlNWYxYzA3ZTVmZDFiY2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmgKQEAgLTkyLDcgKzkyLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkg
b3ZlcnJpZGUgZmluYWw7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsK
LSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgdHJhbnNhY3Rpb25EaWRGaW5pc2hBbmREaXNwYXRjaCgpOwogCkBAIC0xMDgsNyAr
MTA4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgTGVnYWN5UmVxdWVzdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IHNvdXJjZSwgSURCRGF0YWJh
c2VCYWNrZW5kOjpUYXNrVHlwZSwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKLSAgICB2b2lkIGVucXVl
dWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2
ZW50PiYmKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3Q7CiAg
ICAgdm9pZCBvblN1Y2Nlc3NJbnRlcm5hbChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4pOwogICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKIAogICAgIGJvb2wgbV9oYXNQZW5kaW5n
QWN0aXZpdHk7Ci0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7Cisg
ICAgVmVjdG9yPFJlZjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7CiAKICAgICAvLyBPbmx5IHVz
ZWQgaWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJzb3IuCiAgICAgSW5kZXhlZERCOjpD
dXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uY3BwCmluZGV4IGYw
YjM0YTBkZTgyNjU4ODhjMGE0ZDM4YTYxYWVlMTlkYjY0Y2I3YjEuLmNlODQ5ZmQzZjc2NGE0NWZl
ODAxY2FkZTIxMDZkZWQwMTVlM2I0ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNwcApAQCAt
MzA2LDEzICszMDYsMTMgQEAgYm9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2
aXR5KCkgY29uc3QKICAgICByZXR1cm4gbV9oYXNQZW5kaW5nQWN0aXZpdHkgJiYgIW1fY29udGV4
dFN0b3BwZWQ7CiB9CiAKLWJvb2wgTGVnYWN5VHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2
ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVRyYW5zYWN0
aW9uOjpkaXNwYXRjaEV2ZW50Iik7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gRmluaXNoZWQpOwog
ICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsKKyAg
ICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7CiAgICAgbV9zdGF0ZSA9IEZpbmlzaGVk
OwogCiAgICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KQEAgLTMyOCw4ICszMjgsOCBAQCBi
b29sIExlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQogICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOwogCiAgICAgLy8gRklYTUU6IFdoZW4gd2Ug
YWxsb3cgY3VzdG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0
byBjaGFuZ2UuCi0gICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBs
ZXRlRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7Ci0g
ICAgYm9vbCByZXR1cm5WYWx1ZSA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQu
Z2V0KCksIHRhcmdldHMpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50
KTsKKyAgICBib29sIHJldHVyblZhbHVlID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChl
dmVudCwgdGFyZ2V0cyk7CiAgICAgLy8gRklYTUU6IFRyeSB0byBjb25zdHJ1Y3QgYSB0ZXN0IHdo
ZXJlIHx0aGlzfCBvdXRsaXZlcyBvcGVuREJSZXF1ZXN0IGFuZCB3ZQogICAgIC8vIGdldCBhIGNy
YXNoLgogICAgIGlmIChtX29wZW5EQlJlcXVlc3QpIHsKQEAgLTM1OSwxNCArMzU5LDE0IEBAIGNv
bnN0IGNoYXIqIExlZ2FjeVRyYW5zYWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QK
ICAgICByZXR1cm4gIkxlZ2FjeVRyYW5zYWN0aW9uIjsKIH0KIAotdm9pZCBMZWdhY3lUcmFuc2Fj
dGlvbjo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBMZWdhY3lU
cmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fc3RhdGUgIT0gRmluaXNoZWQsICJBIGZpbmlzaGVkIHRyYW5zYWN0
aW9uIHRyaWVkIHRvIGVucXVldWUgYW4gZXZlbnQgb2YgdHlwZSAlcy4iLCBldmVudC0+dHlwZSgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGV2ZW50LT5z
ZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVl
KCkuZW5xdWV1ZUV2ZW50KGV2ZW50KTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2
ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKIElEQkRhdGFi
YXNlQmFja2VuZCogTGVnYWN5VHJhbnNhY3Rpb246OmJhY2tlbmREQigpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNh
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lU
cmFuc2FjdGlvbi5oCmluZGV4IDgzYjc5NzExNWU3OWI3ZWYxYmNjYzVhYTQwMzcwZTIzNzVhZTk0
MjIuLmY3OWRlYzMzMzk1ZGEyYTViZDY2MzNhNjIzYzgzYTNmOTcwNzU1NGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lU
cmFuc2FjdGlvbi5oCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZSBmaW5hbCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsgfQogCiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVh
bCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlIGZpbmFsOwor
ICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGUgZmluYWw7CiAK
ICAgICAvLyBBY3RpdmVET01PYmplY3QKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2
aXR5KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBMZWdhY3lUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
aW50NjRfdCwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZSwgTGVnYWN5RGF0YWJhc2UqLCBMZWdhY3lPcGVuREJSZXF1ZXN0KiwgY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSYpOwogCi0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4p
OworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAgICAgdm9pZCBjbG9zZU9w
ZW5DdXJzb3JzKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihMZWdhY3lDdXJzb3Iq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bS5jcHAKaW5kZXggYzNjYzM4MWE4OGEwMmE4ODI3MWZkYjdkNDI1NTFhMDNlZGM1MTc4Yi4uZDVm
YmRiZmIwZjYzYjk0ZmI4YTUyNjk0MWFhMzM4OTkxZDE0NWZkMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKQEAgLTMwMyw3ICsz
MDMsNyBAQCB2b2lkIE1lZGlhU3RyZWFtOjphY3Rpdml0eUV2ZW50VGltZXJGaXJlZCgpCiAgICAg
ZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRBY3Rpdml0eUV2ZW50cyk7CiAKICAgICBmb3IgKGF1dG8m
IGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7
CisgICAgICAgIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIAogICAgIGV2ZW50cy5jbGVhcigpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1G
U2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNl
bmRlci5jcHAKaW5kZXggNTI3YjVkMTlkOTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4YmNkNWQ5OS4u
OWExNWNiYjAzZDIxNWI2MDk4YzcyMWU0OGZkNjYwY2M4OWU2ODNmZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC0x
NjIsNyArMTYyLDcgQEAgdm9pZCBSVENEVE1GU2VuZGVyOjpzY2hlZHVsZWRFdmVudFRpbWVyRmly
ZWQoKQogICAgIGV2ZW50cy5zd2FwKG1fc2NoZWR1bGVkRXZlbnRzKTsKIAogICAgIGZvciAoYXV0
byYgZXZlbnQgOiBldmVudHMpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgp
KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q0RhdGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
RGF0YUNoYW5uZWwuY3BwCmluZGV4IGQ3NzA4Y2EwNWJlYWQxNDE2NzdmYzg0NWE5YzMzNzZlNjQ0
ZmQzMTQuLmI2N2E2ZDkxNGQyNzk5MGU3YTMzMDA5NGEwZGUzN2MzZGQ1Zjc4YWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
Y3BwCkBAIC0zMjEsNyArMzIxLDcgQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c2NoZWR1bGVkRXZl
bnRUaW1lckZpcmVkKCkKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEV2ZW50cyk7CiAKICAg
ICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50
LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCBkZDQ2NDFlMWI4ZGEzMmRhNzE0
ZjM0NjgxMzM5NjdjNTgxYTQzZTY1Li5mZjVhYWU0NDY0NWYzNGE5NTVkZjE0M2IxOWY3YmE1ZGVl
ZmYzMzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtNzQyLDcgKzc0Miw3IEBAIHZvaWQgUlRDUGVl
ckNvbm5lY3Rpb246OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCgpCiAgICAgZXZlbnRzLnN3YXAo
bV9zY2hlZHVsZWRFdmVudHMpOwogCiAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykKLSAg
ICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRjaEV2
ZW50KCpldmVudCk7CiAKICAgICBldmVudHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5tbQppbmRleCBlNDUzMmM4YTE1ZmQ1NjI5ZDJhMTg1ODhmOTdiMTU0YTIwOGYwZGJjLi42Yzgz
ZWRjZWE1MDhlMzNiNmY2NDc2M2E3ODllYTc1MzJhNDE0ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50Lm1tCkBAIC0yNDMsOCArMjQzLDggQEAgdW5zaWduZWQgbG9uZyBsb25nIFF1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50Ojptb3ZpZVNpemUoKSBjb25zdAogdm9pZCBRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudDo6cG9zdEV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQogewogICAgIFJl
ZjxIVE1MUGx1Z0luRWxlbWVudD4gcHJvdGVjdCgqbV9wYXJlbnRFbGVtZW50KTsKLSAgICBSZWZQ
dHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVlKTsK
LSAgICBtX3BhcmVudEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIFJl
ZjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIHRydWUpOwor
ICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKICNpZiBQTEFU
Rk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9E
ZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJv
eGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwCmluZGV4IDYwNzhmMzdmYjhkM2I5
MWU0ZWE3NmI0MGYzYjI0MGNiMDJkZTEzZmIuLjY4ZWEyOTZhZjgzYTUxYzNkZTYxOGM5OTZlZDQx
MTY0NmIxOGM5NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5
L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwCkBAIC01Nyw3ICs1Nyw3
IEBAIGJvb2wgRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6aGFzTGFzdERhdGEoKQogICAgIHJl
dHVybiBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+aGFzTGFzdERhdGEoKTsKIH0KIAotUGFzc1Jl
ZlB0cjxFdmVudD4gRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKK1Jl
ZlB0cjxFdmVudD4gRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKIHsK
ICAgICByZXR1cm4gRGV2aWNlUHJveGltaXR5RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Vi
a2l0ZGV2aWNlcHJveGltaXR5RXZlbnQsIGRldmljZVByb3hpbWl0eUNsaWVudCgpLT52YWx1ZSgp
LCBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+bWluKCksIGRldmljZVByb3hpbWl0eUNsaWVudCgp
LT5tYXgoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0
eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3By
b3hpbWl0eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmgKaW5kZXggNDBkZGZiN2YyMTBjZmEw
NDFkNWQ2ZmRkYTYwZDJmMGJhMjU1YWIwNi4uODljZjA1NDlhNjQzZDM5NmFhMzA0M2Y1ZDNmYTk2
MjllMWQ5NGM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkv
RGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
cHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuaApAQCAtNDMsNyArNDMsNyBAQCBw
dWJsaWM6CiAgICAgRGV2aWNlUHJveGltaXR5Q2xpZW50KiBkZXZpY2VQcm94aW1pdHlDbGllbnQo
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCk7CisgICAgdmlydHVhbCBSZWZQdHI8RXZlbnQ+IGdl
dExhc3RFdmVudCgpOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7
CiAgICAgc3RhdGljIERldmljZVByb3hpbWl0eUNvbnRyb2xsZXIqIGZyb20oUGFnZSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCA2
NDY1ODQwMDIwZWE2NTM5ZDgwZjRiNDNjMTdhNTQyZDhkM2I3MjcxLi40MWViMTA5ZTdiZWJkOGJl
ZjFiOTZlODY0NTI2MjU1NjM5MjUxZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtNjQ4LDcgKzY0OCw3IEBAIHZvaWQgV2ViU29j
a2V0OjpkaXNwYXRjaE9yUXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiAgICAgaWYgKG1f
c2hvdWxkRGVsYXlFdmVudEZpcmluZykKICAgICAgICAgbV9wZW5kaW5nRXZlbnRzLmFwcGVuZChX
VEY6Om1vdmUoZXZlbnQpKTsKICAgICBlbHNlCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoV1RGOjpt
b3ZlKGV2ZW50KSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiB9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCmluZGV4IGRkZTEzM2Nj
N2M3MDE0NGUyZDEwMzQ0ZmE3NzIzM2M5MWYwNjVmZDQuLjk1NTk5ZTM4Y2FlYTcyZDg3OWI0MTg2
YTJjOTRhNmY5YzFhN2JiNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9h
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAKQEAgLTE4OCw3
ICsxODgsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmZpcmVQZW5kaW5nRXZlbnRzKCkKICAgICB9CiAK
ICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcGVuZGluZ0V2ZW50cy5zaXplKCk7
ICsraW5kZXgpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50c1tpbmRleF0ucmVs
ZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqcGVuZGluZ0V2ZW50c1tpbmRleF0pOwog
CiAgICAgaWYgKGxvYWRpbmdEb25lICYmICFtX2NhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgVmVjdG9yPFJlZlB0cjxWb2lkQ2FsbGJhY2s+PiBjYWxsYmFja3M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMTE1MWJkMWViYTViZTRl
OTY0OGU0ZjNhOWQwMjQ2MWRkYTM1ZGRiOC4uOTMwOTJiY2ZiN2ZkYjlmYTUxMjg3OWMzZjU0ODhh
MDQ4NjA3YzEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9s
bGVyLmNwcApAQCAtNzIsNyArNzIsNyBAQCBib29sIERldmljZU1vdGlvbkNvbnRyb2xsZXI6Omhh
c0xhc3REYXRhKCkKICAgICByZXR1cm4gZGV2aWNlTW90aW9uQ2xpZW50KCktPmxhc3RNb3Rpb24o
KTsKIH0KIAotUGFzc1JlZlB0cjxFdmVudD4gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6Z2V0TGFz
dEV2ZW50KCkKK1JlZlB0cjxFdmVudD4gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6Z2V0TGFzdEV2
ZW50KCkKIHsKICAgICByZXR1cm4gRGV2aWNlTW90aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuZGV2aWNlbW90aW9uRXZlbnQsIGRldmljZU1vdGlvbkNsaWVudCgpLT5sYXN0TW90aW9uKCkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgKaW5kZXgg
N2Q3MmQ1MTVjYzZkODEzZGMxZjM4YzYxOWU4OWUyY2RjZmQ0YjlkYS4uMTRkYzc0NGI1YjQ0YWRh
MDViM2YzZGIzYWRmODk4MWRjZjllZGEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RldmljZU1vdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNl
TW90aW9uQ29udHJvbGxlci5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBEZXZpY2VN
b3Rpb25DbGllbnQqIGRldmljZU1vdGlvbkNsaWVudCgpOwogCiAgICAgdmlydHVhbCBib29sIGhh
c0xhc3REYXRhKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRM
YXN0RXZlbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2
ZW50KCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUo
KTsKICAgICBzdGF0aWMgRGV2aWNlTW90aW9uQ29udHJvbGxlciogZnJvbShQYWdlKik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCmlu
ZGV4IGFjZTNiMmIyMjk2M2U4MTI2MzliOTA4MmNhYjg0NmQxMDE3Y2Q1MzYuLjM5NmJmOGNmNDA5
NTg0ODcxZmUwNmVhOTczYzMwZDVkNmZkOGMyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBAIGJv
b2wgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpoYXNMYXN0RGF0YSgpCiAgICAgcmV0dXJu
IGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCktPmxhc3RPcmllbnRhdGlvbigpOwogfQogCi1QYXNz
UmVmUHRyPEV2ZW50PiBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI6OmdldExhc3RFdmVudCgp
CitSZWZQdHI8RXZlbnQ+IERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50
KCkKIHsKICAgICByZXR1cm4gRGV2aWNlT3JpZW50YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5kZXZpY2VvcmllbnRhdGlvbkV2ZW50LCBkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpLT5s
YXN0T3JpZW50YXRpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3Jp
ZW50YXRpb25Db250cm9sbGVyLmgKaW5kZXggMTE4MzA2MzQ4NjllOTA2ZTU4NzczNzRiYjczYTJm
ZGU0ZThiOTI4Ny4uYjAxZjhkMWE2MmIwNDc5MmIzNWY4NDNhMmZmMDA4NTdhNTMxMTQzOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaApA
QCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXN1bWVVcGRhdGVzKCk7CiAjZWxz
ZQogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBS
ZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICBzdGF0
aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmlu
ZGV4IDhjMTBkMGU5NGMwMWI3MDc4YmQxMTIwYjY3NDQ1ZjY0NjY4YjVhOWMuLjkzZTY2ZTg0MTNi
OThjY2I3NGY5ZjM4ODJmNGQwNThjMWY0MDVmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApA
QCAtNDA1MCw3ICs0MDUwLDcgQEAgRXZlbnRMaXN0ZW5lciogRG9jdW1lbnQ6OmdldFdpbmRvd0F0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmUKICAgICByZXR1cm4g
bV9kb21XaW5kb3ctPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCwgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRG9jdW1lbnQ6OmRpc3Bh
dGNoV2luZG93RXZlbnQoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdldCogdGFyZ2V0KQogewogICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKICAgICBpZiAoIW1fZG9tV2luZG93KQpA
QCAtNDA2OCwyMSArNDA2OCwyMSBAQCB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRvd0xvYWRF
dmVudCgpCiAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnREaWRGaW5pc2hMb2Fk
RXZlbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVdpbmRvd0V2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVdpbmRvd0V2ZW50KFJlZjxF
dmVudD4mJiBldmVudCkKIHsKICAgICBldmVudC0+c2V0VGFyZ2V0KG1fZG9tV2luZG93LmdldCgp
KTsKLSAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KGV2ZW50KTsKKyAgICBtX2V2ZW50UXVl
dWUuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVudCkpOwogfQogCi12b2lkIERvY3VtZW50Ojpl
bnF1ZXVlRG9jdW1lbnRFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgRG9jdW1l
bnQ6OmVucXVldWVEb2N1bWVudEV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBldmVu
dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQp
OworICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAK
LXZvaWQgRG9jdW1lbnQ6OmVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZU92ZXJmbG93RXZlbnQoUmVmPEV2ZW50PiYmIGV2
ZW50KQogewotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQpOworICAgIG1fZXZl
bnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKIFJlZlB0cjxFdmVu
dD4gRG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTU5ODAsMjQgKzU5ODAsMjQgQEAgdm9pZCBEb2N1bWVudDo6c2VuZFdp
bGxSZXZlYWxFZGdlRXZlbnRzSWZOZWVkZWQoY29uc3QgSW50UG9pbnQmIG9sZFBvc2l0aW9uLCBj
b24KICAgICAvLyBCb3R0b20gZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueSgpID49IHdpbGxS
ZXZlYWxCb3R0b21Ob3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi55KCkgPiBvbGRQb3Np
dGlvbi55KCkKICAgICAgICAgJiYgd2lsbFJldmVhbEJvdHRvbU5vdGlmaWNhdGlvblBvaW50ID49
IG9sZFBvc2l0aW9uLnkoKSkgewotICAgICAgICBSZWZQdHI8RXZlbnQ+IHdpbGxSZXZlYWxFdmVu
dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWxib3R0b21FdmVu
dCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsYm90dG9tRXZlbnQsIGZh
bHNlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdp
bmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1
ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAg
ICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgp
KTsKKyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxS
ZXZlYWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gVG9wIGVkZ2UuCiAgICAg
aWYgKG5ld1Bvc2l0aW9uLnkoKSA8PSB3aWxsUmV2ZWFsVG9wTm90aWZpY2F0aW9uUG9pbnQgJiYg
bmV3UG9zaXRpb24ueSgpIDwgb2xkUG9zaXRpb24ueSgpCiAgICAgICAgICYmIHdpbGxSZXZlYWxU
b3BOb3RpZmljYXRpb25Qb2ludCA8PSBvbGRQb3NpdGlvbi55KCkpIHsKLSAgICAgICAgUmVmUHRy
PEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJr
aXR3aWxscmV2ZWFsdG9wRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIFJlZjxFdmVudD4g
d2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0d2lsbHJl
dmVhbHRvcEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICBpZiAoIXRhcmdldCkKLSAgICAg
ICAgICAgIGVucXVldWVXaW5kb3dFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAg
ICAgICAgICAgIGVucXVldWVXaW5kb3dFdmVudChXVEY6Om1vdmUod2lsbFJldmVhbEV2ZW50KSk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgd2lsbFJldmVhbEV2ZW50LT5zZXRUYXJnZXQo
dGFyZ2V0KTsKLSAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQod2lsbFJldmVh
bEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50
KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjAw
NywyNCArNjAwNywyNCBAQCB2b2lkIERvY3VtZW50OjpzZW5kV2lsbFJldmVhbEVkZ2VFdmVudHNJ
Zk5lZWRlZChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbgogICAgIC8vIFJpZ2h0IGVk
Z2UuCiAgICAgaWYgKG5ld1Bvc2l0aW9uLngoKSA+PSB3aWxsUmV2ZWFsUmlnaHROb3RpZmljYXRp
b25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkgPiBvbGRQb3NpdGlvbi54KCkKICAgICAgICAgJiYg
d2lsbFJldmVhbFJpZ2h0Tm90aWZpY2F0aW9uUG9pbnQgPj0gb2xkUG9zaXRpb24ueCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAg
ICAgIFJlZjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlm
ICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVu
dC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3
aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3aWxsUmV2ZWFs
RXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVl
dWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRR
dWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgLy8gTGVmdCBlZGdlLgogICAgIGlmIChuZXdQb3NpdGlvbi54KCkgPD0g
d2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkgPCBvbGRQ
b3NpdGlvbi54KCkKICAgICAgICAgJiYgd2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Qb2ludCA8
PSBvbGRQb3NpdGlvbi54KCkpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiB3aWxsUmV2ZWFsRXZl
bnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsbGVmdEV2ZW50
LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBSZWY8RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWxsZWZ0RXZlbnQsIGZhbHNl
LCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRv
d0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdp
bmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAg
ICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsK
KyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZl
YWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5k
ZXggOTc2Y2RhMWFkNzA1ZjhjZWIzODRiYmM3YWM0MGEyZmUwODAzNTViNi4uN2NhYjMxNmQ3NTUw
YzliNmU1YWNhMzhkY2MwZTNkOTVhNWI4YTRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTc4
OCw3ICs3ODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIHNl
dFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwogICAgIEV2ZW50TGlzdGVuZXIqIGdldFdp
bmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hXaW5kb3dFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gPSBudWxscHRyKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQmLCBFdmVudFRhcmdldCogPSBu
dWxscHRyKTsKICAgICB2b2lkIGRpc3BhdGNoV2luZG93TG9hZEV2ZW50KCk7CiAKICAgICBSZWZQ
dHI8RXZlbnQ+IGNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNlcHRpb25D
b2RlJik7CkBAIC0xMDkyLDkgKzEwOTIsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
Q29udGV4dFRocmVhZCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgYm9vbCBp
c0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIHZvaWQgZW5xdWV1ZVdpbmRvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsK
LSAgICB2b2lkIGVucXVldWVEb2N1bWVudEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2
b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVu
cXVldWVXaW5kb3dFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZvaWQgZW5xdWV1ZURvY3VtZW50
RXZlbnQoUmVmPEV2ZW50PiYmKTsKKyAgICB2b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50KFJlZjxF
dmVudD4mJik7CiAgICAgdm9pZCBlbnF1ZXVlUGFnZXNob3dFdmVudChQYWdlc2hvd0V2ZW50UGVy
c2lzdGVuY2UpOwogICAgIHZvaWQgZW5xdWV1ZUhhc2hjaGFuZ2VFdmVudChjb25zdCBTdHJpbmcm
IG9sZFVSTCwgY29uc3QgU3RyaW5nJiBuZXdVUkwpOwogICAgIHZvaWQgZW5xdWV1ZVBvcHN0YXRl
RXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5jcHAKaW5kZXggYTdiYjVkZmUyY2Fm
ODQ4ZDRmNWY5MmUyODFjOTczMmU0OGEyZTlmOS4uOGVhNWVjMDM3NGJkMTM3ODg3MWQyYTYyZDk0
YTliOTc4MjBiYzZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZl
bnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5j
cHAKQEAgLTY4LDE1ICs2OCwxNSBAQCBEb2N1bWVudEV2ZW50UXVldWU6On5Eb2N1bWVudEV2ZW50
UXVldWUoKQogewogfQogCi1ib29sIERvY3VtZW50RXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBEb2N1bWVudEV2ZW50UXVldWU6OmVucXVldWVF
dmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7
Ci0gICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250YWlucyhldmVudC5nZXQoKSkpOworICAg
IEFTU0VSVCghbV9xdWV1ZWRFdmVudHMuY29udGFpbnMoZXZlbnQucHRyKCkpKTsKIAogICAgIGlm
IChtX2lzQ2xvc2VkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3F1ZXVlZEV2ZW50
cy5hZGQoZXZlbnQpOworICAgIG1fcXVldWVkRXZlbnRzLmFkZChldmVudC5wdHIoKSk7CiAgICAg
aWYgKCFtX3BlbmRpbmdFdmVudFRpbWVyLT5pc0FjdGl2ZSgpKQogICAgICAgICBtX3BlbmRpbmdF
dmVudFRpbWVyLT5zdGFydE9uZVNob3QoMCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05OSw5ICs5
OSw5IEBAIHZvaWQgRG9jdW1lbnRFdmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2
ZW50KE5vZGUmIHRhcmdldCkKICAgICBib29sIGJ1YmJsZXMgPSB0YXJnZXQuaXNEb2N1bWVudE5v
ZGUoKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBmYWxzZTsKIAotICAgIFJlZlB0cjxFdmVudD4g
c2Nyb2xsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgYnVi
YmxlcywgY2FuY2VsYWJsZSk7CisgICAgUmVmPEV2ZW50PiBzY3JvbGxFdmVudCA9IEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBidWJibGVzLCBjYW5jZWxhYmxlKTsKICAg
ICBzY3JvbGxFdmVudC0+c2V0VGFyZ2V0KCZ0YXJnZXQpOwotICAgIGVucXVldWVFdmVudChzY3Jv
bGxFdmVudC5yZWxlYXNlKCkpOworICAgIGVucXVldWVFdmVudChXVEY6Om1vdmUoc2Nyb2xsRXZl
bnQpKTsKIH0KIAogYm9vbCBEb2N1bWVudEV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2ZW50JiBl
dmVudCkKQEAgLTE0Niw5ICsxNDYsOSBAQCB2b2lkIERvY3VtZW50RXZlbnRRdWV1ZTo6ZGlzcGF0
Y2hFdmVudChFdmVudCYgZXZlbnQpCiAgICAgLy8gV2h5IGRvIHdlIGhhdmUgdGhpcyBzcGVjaWFs
IGNhc2UgaGVyZSBpbnN0ZWFkIG9mIGEgdmlydHVhbCBmdW5jdGlvbiBvbiBFdmVudFRhcmdldD8K
ICAgICBFdmVudFRhcmdldCYgZXZlbnRUYXJnZXQgPSAqZXZlbnQudGFyZ2V0KCk7CiAgICAgaWYg
KERPTVdpbmRvdyogd2luZG93ID0gZXZlbnRUYXJnZXQudG9ET01XaW5kb3coKSkKLSAgICAgICAg
d2luZG93LT5kaXNwYXRjaEV2ZW50KCZldmVudCwgMCk7CisgICAgICAgIHdpbmRvdy0+ZGlzcGF0
Y2hFdmVudChldmVudCwgbnVsbHB0cik7CiAgICAgZWxzZQotICAgICAgICBldmVudFRhcmdldC5k
aXNwYXRjaEV2ZW50KCZldmVudCk7CisgICAgICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQo
ZXZlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRF
dmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmgKaW5k
ZXggOTgyNWVkMmY2MDdhNDJhODdiNTExMzNhOWI4MTVlNTVlZjIzMGVkYy4uN2QxMTFkMmQ0YjVi
YTY5YzhiM2U3YzIyZjg3NDRjZTc5Njc1M2I5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dEV2ZW50UXVldWUuaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgRG9j
dW1lbnRFdmVudFF1ZXVlKERvY3VtZW50Jik7CiAgICAgdmlydHVhbCB+RG9jdW1lbnRFdmVudFF1
ZXVlKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAppbmRleCA5OGE2MTBmZWQxYzZhOTU0ZmExNDI3NGVmOWNhZTJjZjhhNzM5ODNjLi4zZDczZGVh
NjhmZjRkMzU4Y2MxMDhiZGJmY2JhNTM3NTM4NzUzM2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogICAgIGlmIChpc0Zv
cmNlRXZlbnQocGxhdGZvcm1FdmVudCkgJiYgIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlRm9y
RXZlbnRUeXBlKHBsYXRmb3JtRXZlbnQudHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUo
ZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtRXZlbnQsIGRldGFp
bCwgcmVsYXRlZFRhcmdldCk7CisgICAgUmVmPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3Vz
ZUV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRm
b3JtRXZlbnQsIGRldGFpbCwgcmVsYXRlZFRhcmdldCk7CiAKICAgICBpZiAobW91c2VFdmVudC0+
dHlwZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFNob3VsZG4ndCBoYXBw
ZW4uCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogICAgICAgICAv
LyBTcGVjaWFsIGNhc2U6IElmIGl0J3MgYSBkb3VibGUgY2xpY2sgZXZlbnQsIHdlIGFsc28gc2Vu
ZCB0aGUgZGJsY2xpY2sgZXZlbnQuIFRoaXMgaXMgbm90IHBhcnQKICAgICAgICAgLy8gb2YgdGhl
IERPTSBzcGVjcywgYnV0IGlzIHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb25kYmxj
bGljaz0iIiBhdHRyaWJ1dGUuIFRoaXMgaXMgdHJlYXRlZAogICAgICAgICAvLyBhcyBhIHNlcGFy
YXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMgbGlrZSBGaXJlZm94LCBh
bmQgc28gd2UgZG8gdGhlIHNhbWUuCi0gICAgICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBkb3VibGVD
bGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxNb3VzZUV2ZW50
PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7CiAgICAgICAgIGRvdWJs
ZUNsaWNrRXZlbnQtPmluaXRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50LAog
ICAgICAgICAgICAgbW91c2VFdmVudC0+YnViYmxlcygpLCBtb3VzZUV2ZW50LT5jYW5jZWxhYmxl
KCksIG1vdXNlRXZlbnQtPnZpZXcoKSwgbW91c2VFdmVudC0+ZGV0YWlsKCksCiAgICAgICAgICAg
ICBtb3VzZUV2ZW50LT5zY3JlZW5YKCksIG1vdXNlRXZlbnQtPnNjcmVlblkoKSwgbW91c2VFdmVu
dC0+Y2xpZW50WCgpLCBtb3VzZUV2ZW50LT5jbGllbnRZKCksCkBAIC0yODUsNyArMjg1LDcgQEAg
Ym9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoV2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxXaGVlbEV2
ZW50PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVudDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVudCgpLmRl
ZmF1bHRWaWV3KCkpOworICAgIFJlZjxXaGVlbEV2ZW50PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVu
dDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOwogCiAgICAgLy8gRXZl
bnRzIHdpdGggbm8gZGVsdGFzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSB0aGV5IGNvbnZleSBwbGF0
Zm9ybSBpbmZvcm1hdGlvbiBhYm91dCBzY3JvbGwgZ2VzdHVyZXMKICAgICAvLyBhbmQgbW9tZW50
dW0gYmVnaW5uaW5nIG9yIGVuZGluZy4gSG93ZXZlciwgdGhvc2UgZXZlbnRzIHNob3VsZCBub3Qg
YmUgc2VudCB0byB0aGUgRE9NIHNpbmNlIHNvbWUKQEAgLTMwMCw5ICszMDAsOSBAQCBib29sIEVs
ZW1lbnQ6OmRpc3BhdGNoV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50
KQogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50JiBwbGF0Zm9ybUV2ZW50KQogewotICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBldmVu
dCA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgpLmRlZmF1
bHRWaWV3KCkpOworICAgIFJlZjxLZXlib2FyZEV2ZW50PiBldmVudCA9IEtleWJvYXJkRXZlbnQ6
OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOwogICAgIGlm
IChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGZyYW1l
LT5ldmVudEhhbmRsZXIoKS5hY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKGV2
ZW50LmdldCgpKSkKKyAgICAgICAgaWYgKGZyYW1lLT5ldmVudEhhbmRsZXIoKS5hY2Nlc3NpYmls
aXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKGV2ZW50KSkKICAgICAgICAgICAgIGV2ZW50LT5z
dG9wUHJvcGFnYXRpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hFdmVudCh0aGlzLCBldmVudCkgJiYgIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwpAQCAt
MjMyNCw3ICsyMzI0LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVn
aW4oKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxh
dGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0
aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9u
KCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5cGUsIDEsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZvcmNlQXRDbGljayk7Ci0gICAgUmVmUHRy
PE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCA9ICBNb3VzZUV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2V3aWxsYmVnaW5FdmVudCwgZG9jdW1lbnQo
KS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNlRXZlbnQsIDAsIG51bGxwdHIpOworICAgIFJl
ZjxNb3VzZUV2ZW50PiBtb3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQgPSAgTW91c2VFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNld2lsbGJlZ2luRXZlbnQsIGRvY3VtZW50
KCkuZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm1Nb3VzZUV2ZW50LCAwLCBudWxscHRyKTsKICAgICBt
b3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKICAgICBkaXNwYXRjaEV2
ZW50KG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCmluZGV4IDU5
NmRkODU4YTA0YzM2M2E3NWU0OGVhY2Y4YTc0YTVhOGQ2ZWU4NTUuLjVjMWU2ZmU3MDEyNzhjZGU1
YWU2ZTAzZWQ4NWE1ZTI3NGQ3OWEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcApAQCAtMTYyLDEyICsx
NjIsMTIgQEAgUGFzc1JlZlB0cjxFdmVudD4gRXZlbnQ6OmNsb25lRm9yKEhUTUxJRnJhbWVFbGVt
ZW50KikgY29uc3QKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZSh0eXBlKCksIGJ1YmJsZXMoKSwg
Y2FuY2VsYWJsZSgpKTsKIH0KIAotdm9pZCBFdmVudDo6c2V0VGFyZ2V0KFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRXZlbnQ6OnNldFRhcmdldChSZWZQdHI8RXZlbnRUYXJn
ZXQ+JiYgdGFyZ2V0KQogewogICAgIGlmIChtX3RhcmdldCA9PSB0YXJnZXQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OworICAgIG1fdGFyZ2V0ID0gV1RGOjptb3Zl
KHRhcmdldCk7CiAgICAgaWYgKG1fdGFyZ2V0KQogICAgICAgICByZWNlaXZlZFRhcmdldCgpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnQuaAppbmRleCAwOWU3NzhkNTEzNmZmMGZjYTg2ZTRkYzI5ZmViYWFlODljMjE3
ZjBjLi4wY2NjZTEwODg1Mzg4NTJlMzFkNGYzNDIxNmNlY2QxOGU4OTQyMzNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnQuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFR5cGUoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KICAgICAKICAgICBFdmVudFRh
cmdldCogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CisgICAgdm9pZCBzZXRUYXJnZXQo
UmVmUHRyPEV2ZW50VGFyZ2V0PiYmKTsKIAogICAgIEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0OyB9CiAgICAgdm9pZCBzZXRDdXJyZW50
VGFyZ2V0KEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0KSB7IG1fY3VycmVudFRhcmdldCA9IGN1
cnJlbnRUYXJnZXQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXgg
MmJkYzM1MGI1YTVmNzYzMzBiMmQ3ZGI3NjgyYjc2Zjg4NjUzYWEyZC4uMzQxODQ3ZmQzODAyODhm
MzAwZTBkODNiNmIwNDNkYWJlNTIxNzQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0
Y2hlci5jcHAKQEAgLTcwLDkgKzcwLDkgQEAgYm9vbCBXaW5kb3dFdmVudENvbnRleHQ6OmhhbmRs
ZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoIW1fd2luZG93KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBldmVudC5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOworICAg
IGV2ZW50LnNldFRhcmdldChtX3RhcmdldC5jb3B5UmVmKCkpOwogICAgIGV2ZW50LnNldEN1cnJl
bnRUYXJnZXQobV93aW5kb3cuZ2V0KCkpOwotICAgIG1fd2luZG93LT5maXJlRXZlbnRMaXN0ZW5l
cnMoJmV2ZW50KTsKKyAgICBtX3dpbmRvdy0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjAxLDEwICsyMDEsMTAgQEAgaW5saW5lIEV2ZW50VGFy
Z2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhOb2RlJiByZWZlcmVuY2VOb2Rl
KQogICAgIHJldHVybiAmcmVmZXJlbmNlTm9kZTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6
OmRpc3BhdGNoU2NvcGVkRXZlbnQoTm9kZSYgbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
Cit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiBub2RlLCBF
dmVudCYgZXZlbnQpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHRhcmdldCBoZXJlIGJl
Y2F1c2UgaXQgY2FuIGdvIGF3YXkgYnkgdGhlIHRpbWUgd2UgYWN0dWFsbHkgZmlyZSB0aGUgZXZl
bnQuCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxl
cyhub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rhcmdl
dFJ1bGVzKG5vZGUpKTsKICAgICBTY29wZWRFdmVudFF1ZXVlOjpzaW5nbGV0b24oKS5lbnF1ZXVl
RXZlbnQoZXZlbnQpOwogfQogCkBAIC0zMDAsMjMgKzMwMCwxOSBAQCBzdGF0aWMgdm9pZCBkaXNw
YXRjaEV2ZW50SW5ET00oRXZlbnQmIGV2ZW50LCBjb25zdCBFdmVudFBhdGgmIHBhdGgsIFdpbmRv
d0V2ZW50QwogICAgIH0KIH0KIAotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQo
Tm9kZSogb3JpZ2luLCBQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jvb2wgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG9yaWdpbiwgRXZlbnQmIGV2ZW50KQogewogICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBpZiAoIXBycEV2ZW50KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIEFTU0VSVChvcmlnaW4pOwogICAgIFJlZlB0cjxOb2Rl
PiBub2RlKG9yaWdpbik7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudChwcnBFdmVudCk7CiAgICAg
UmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IG5vZGUtPmRvY3VtZW50KCkudmlldygpOwotICAgIEV2
ZW50UGF0aCBldmVudFBhdGgoKm5vZGUsICpldmVudCk7CisgICAgRXZlbnRQYXRoIGV2ZW50UGF0
aCgqbm9kZSwgZXZlbnQpOwogCi0gICAgaWYgKEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0g
ZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKKyAgICBpZiAoRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJn
ZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0KCkpCiAgICAgICAgIGV2ZW50UGF0aC5zZXRSZWxhdGVk
VGFyZ2V0KCpub2RlLCAqcmVsYXRlZFRhcmdldCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykg
JiYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoaXM8VG91Y2hFdmVudD4oKmV2ZW50KSkgewotICAg
ICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRvd25jYXN0PFRvdWNoRXZlbnQ+
KCpldmVudCkpKQorICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkpIHsKKyAgICAgICAgaWYg
KCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cyhkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudCkp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCkBAIC0zMjQsOCArMzIw
LDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogb3JpZ2luLCBQ
YXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBDaGlsZE5vZGVzTGF6eVNuYXBzaG90Ojp0
YWtlQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCgpOwogCiAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9
IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKTsKLSAgICBldmVudC0+c2V0
VGFyZ2V0KHRhcmdldCk7Ci0gICAgaWYgKCFldmVudC0+dGFyZ2V0KCkpCisgICAgZXZlbnQuc2V0
VGFyZ2V0KHRhcmdldCk7CisgICAgaWYgKCFldmVudC50YXJnZXQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighTm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CkBAIC0zMzQsMzAg
KzMzMCwzMCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmln
aW4sIFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogCiAgICAgSW5wdXRFbGVtZW50Q2xpY2tT
dGF0ZSBjbGlja0hhbmRsaW5nU3RhdGU7CiAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpu
b2RlKSkKLSAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxEaXNw
YXRjaEV2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAgZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxEaXNwYXRjaEV2ZW50KGV2ZW50LCBjbGlja0hh
bmRsaW5nU3RhdGUpOwogCi0gICAgaWYgKCFldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYg
IWV2ZW50UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTSgqZXZlbnQs
IGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsKKyAgICBpZiAoIWV2ZW50LnByb3BhZ2F0
aW9uU3RvcHBlZCgpICYmICFldmVudFBhdGguaXNFbXB0eSgpKQorICAgICAgICBkaXNwYXRjaEV2
ZW50SW5ET00oZXZlbnQsIGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsKIAotICAgIGV2
ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsK
LSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKLSAgICBldmVudC0+c2V0RXZl
bnRQaGFzZSgwKTsKKyAgICBldmVudC5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFy
Z2V0UnVsZXMoKm5vZGUpKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOwor
ICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoMCk7CiAKICAgICBpZiAoY2xpY2tIYW5kbGluZ1N0YXRl
LnN0YXRlZnVsKQotICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkuZGlk
RGlzcGF0Y2hDbGlja0V2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAg
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLmRpZERpc3BhdGNoQ2xpY2tFdmVudChl
dmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAgIC8vIENhbGwgZGVmYXVsdCBldmVudCBo
YW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHByZXZlbnRpbmcK
ICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhhbmRsZXJzIGFy
ZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5k
IG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgp
ICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgY2FsbERlZmF1bHRFdmVudEhh
bmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKCpldmVudCwgZXZlbnRQYXRoKTsKKyAgICBpZiAoIWV2
ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZlbnQuZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAg
ICAgY2FsbERlZmF1bHRFdmVudEhhbmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKGV2ZW50LCBldmVu
dFBhdGgpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gsIHRoZSBl
dmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCiAgICAgLy8gb3V0ZXJtb3N0IHNoYWRvdyBET00g
Ym91bmRhcnkuCi0gICAgZXZlbnQtPnNldFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFyZ2V0
KCkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOworICAgIGV2ZW50LnNl
dFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFyZ2V0KCkpOworICAgIGV2ZW50LnNldEN1cnJl
bnRUYXJnZXQobnVsbHB0cik7CiAKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVk
KCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzaG91bGRFdmVudENyb3NzU2hhZG93Qm91bmRhcnkoRXZlbnQmIGV2ZW50LCBT
aGFkb3dSb290JiBzaGFkb3dSb290LCBFdmVudFRhcmdldCYgdGFyZ2V0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDY0MDQwZGQzY2M0YmU4N2JlYjYxOGMyMDljZjQ5ZjIy
YzQwNjU0ZDIuLmYxODlkN2E0ZGYyYjg1ZDI3YWY3NDVjZmFlM2FhZTQ2ODBkYTkzNTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTM4LDExICszOCwxMSBAQCBjbGFzcyBO
b2RlOwogCiBuYW1lc3BhY2UgRXZlbnREaXNwYXRjaGVyIHsKIAotYm9vbCBkaXNwYXRjaEV2ZW50
KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50Pik7Ci12b2lkIGRpc3BhdGNoU2NvcGVkRXZlbnQoTm9k
ZSYsIFBhc3NSZWZQdHI8RXZlbnQ+KTsKK2Jvb2wgZGlzcGF0Y2hFdmVudChOb2RlKiwgRXZlbnQm
KTsKK3ZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiwgRXZlbnQmKTsKIHZvaWQgZGlzcGF0
Y2hTaW11bGF0ZWRDbGljayhFbGVtZW50KiwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCwgU2ltdWxh
dGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucywgU2ltdWxhdGVkQ2xpY2tWaXN1YWxPcHRpb25zKTsK
IAotfTsKK30KIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaAppbmRleCBlOTkzNGM1MDhjMmYx
NjQ5ZDU0YjgwYjY1OGZmNmRjYmI0MTdlMWY3Li5hYzM5ZWM2MTdhZjhlZDQ2MmE1MWNkZWU3YTE1
ZDFmNDg4Mjg0YjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKQEAgLTM2LDcgKzM2LDcgQEAg
Y2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudFF1ZXVlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5F
dmVudFF1ZXVlKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChQYXNzUmVmUHRy
PEV2ZW50PikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYm
KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50JikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjbG9zZSgpID0gMDsgLy8gRGlzY2FyZCBhY2N1bXVsYXRlZCBldmVudHMgYW5k
IGFsbCBmdXR1cmUgZXZlbnRzLiBObyBldmVudHMgd2lsbCBiZSBkaXNwYXRjaGVkIGFmdGVyIHRo
aXMuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXggNzYyYTZhNTI4ZjM1MTM0
MzNjZGJkY2Y5NDBhNmU2Mjk3OTczNjI1Yi4uYWI1MTU5MjJhYjRiNzAwYmYxZTZlYjM4Mjk2NzM3
NDdhYTg2ZGUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCkBAIC0xMzQsNyArMTM0
LDcgQEAgYm9vbCBFdmVudFRhcmdldDo6Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogICAgIHJldHVybiByZW1vdmVFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTsKIH0KIAotYm9vbCBFdmVudFRhcmdldDo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiti
b29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KEV2ZW50KiBldmVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgaWYgKCFldmVudCkgewogICAgICAgICBlYyA9IFR5cGVFcnJvcjsKQEAg
LTE0OSwxNiArMTQ5LDE2IEBAIGJvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmICghc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZGlz
cGF0Y2hFdmVudChldmVudCk7CisgICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIH0K
IAotYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKK2Jvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAg
IGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhp
cyk7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7Ci0gICAgYm9v
bCBkZWZhdWx0UHJldmVudGVkID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LmdldCgpKTsKLSAg
ICBldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKKyAgICBldmVudC5zZXRUYXJnZXQodGhpcyk7Cisg
ICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICBldmVudC5zZXRFdmVudFBoYXNl
KEV2ZW50OjpBVF9UQVJHRVQpOworICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZpcmVFdmVu
dExpc3RlbmVycyhldmVudCk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsKICAgICByZXR1
cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KIApAQCAtMTY2LDMwICsxNjYsMzAgQEAgdm9pZCBFdmVu
dFRhcmdldDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCiB7CiB9CiAKLXN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIGxlZ2FjeVR5cGUoY29uc3QgRXZlbnQqIGV2ZW50KQorc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyYgbGVnYWN5VHlwZShjb25zdCBFdmVudCYgZXZlbnQpCiB7
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50
KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50
KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50Owog
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZl
bnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uc3RhcnRF
dmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2
ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbml0
ZXJhdGlvbkV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1h
dGlvbml0ZXJhdGlvbkV2ZW50KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdEFu
aW1hdGlvbkl0ZXJhdGlvbkV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50
TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQpCiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCku
d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLndoZWVsRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkud2hlZWxFdmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZl
bnQ7CiAKICAgICByZXR1cm4gZW1wdHlBdG9tOwogfQogCi1ib29sIEV2ZW50VGFyZ2V0OjpmaXJl
RXZlbnRMaXN0ZW5lcnMoRXZlbnQqIGV2ZW50KQorYm9vbCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50
TGlzdGVuZXJzKEV2ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTighTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRk
ZW4oKSk7Ci0gICAgQVNTRVJUKGV2ZW50ICYmIGV2ZW50LT5pc0luaXRpYWxpemVkKCkpOworICAg
IEFTU0VSVChldmVudC5pc0luaXRpYWxpemVkKCkpOwogCiAgICAgRXZlbnRUYXJnZXREYXRhKiBk
ID0gZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgaWYgKCFkKQpAQCAtMjAwLDIxICsyMDAsMjEgQEAg
Ym9vbCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCkKICAgICBp
ZiAoIWxlZ2FjeVR5cGVOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgbGVnYWN5TGlzdGVuZXJzVmVj
dG9yID0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5maW5kKGxlZ2FjeVR5cGVOYW1lKTsKIAotICAgIEV2
ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAu
ZmluZChldmVudC0+dHlwZSgpKTsKKyAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lcnNW
ZWN0b3IgPSBkLT5ldmVudExpc3RlbmVyTWFwLmZpbmQoZXZlbnQudHlwZSgpKTsKIAogICAgIGlm
IChsaXN0ZW5lcnNWZWN0b3IpCiAgICAgICAgIGZpcmVFdmVudExpc3RlbmVycyhldmVudCwgZCwg
Kmxpc3RlbmVyc1ZlY3Rvcik7CiAgICAgZWxzZSBpZiAobGVnYWN5TGlzdGVuZXJzVmVjdG9yKSB7
Ci0gICAgICAgIEF0b21pY1N0cmluZyB0eXBlTmFtZSA9IGV2ZW50LT50eXBlKCk7Ci0gICAgICAg
IGV2ZW50LT5zZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKKyAgICAgICAgQXRvbWljU3RyaW5nIHR5
cGVOYW1lID0gZXZlbnQudHlwZSgpOworICAgICAgICBldmVudC5zZXRUeXBlKGxlZ2FjeVR5cGVO
YW1lKTsKICAgICAgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBkLCAqbGVnYWN5TGlzdGVu
ZXJzVmVjdG9yKTsKLSAgICAgICAgZXZlbnQtPnNldFR5cGUodHlwZU5hbWUpOworICAgICAgICBl
dmVudC5zZXRUeXBlKHR5cGVOYW1lKTsKICAgICB9CiAKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZh
dWx0UHJldmVudGVkKCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9
CiAgICAgICAgIAotdm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBl
dmVudCwgRXZlbnRUYXJnZXREYXRhKiBkLCBFdmVudExpc3RlbmVyVmVjdG9yJiBlbnRyeSkKK3Zv
aWQgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQsIEV2ZW50VGFy
Z2V0RGF0YSogZCwgRXZlbnRMaXN0ZW5lclZlY3RvciYgZW50cnkpCiB7CiAgICAgUmVmPEV2ZW50
VGFyZ2V0PiBwcm90ZWN0KCp0aGlzKTsKIApAQCAtMjI2LDMyICsyMjYsMzIgQEAgdm9pZCBFdmVu
dFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCwgRXZlbnRUYXJnZXREYXRh
KiBkLCBFdmVudExpc3QKICAgICBzaXplX3Qgc2l6ZSA9IGVudHJ5LnNpemUoKTsKICAgICBpZiAo
IWQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKQogICAgICAgICBkLT5maXJpbmdFdmVudEl0ZXJhdG9y
cyA9IHN0ZDo6bWFrZV91bmlxdWU8RmlyaW5nRXZlbnRJdGVyYXRvclZlY3Rvcj4oKTsKLSAgICBk
LT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXBwZW5kKEZpcmluZ0V2ZW50SXRlcmF0b3IoZXZlbnQt
PnR5cGUoKSwgaSwgc2l6ZSkpOworICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5hcHBlbmQo
RmlyaW5nRXZlbnRJdGVyYXRvcihldmVudC50eXBlKCksIGksIHNpemUpKTsKIAogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbnVsbHB0cjsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRDb29raWU7CiAgICAgaWYgKGlzPERvY3VtZW50
Pihjb250ZXh0KSkgewogICAgICAgICBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250
ZXh0KTsKLSAgICAgICAgd2lsbERpc3BhdGNoRXZlbnRDb29raWUgPSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KCpkb2N1bWVudCwgKmV2ZW50LCBzaXplID4gMCk7
CisgICAgICAgIHdpbGxEaXNwYXRjaEV2ZW50Q29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsRGlzcGF0Y2hFdmVudCgqZG9jdW1lbnQsIGV2ZW50LCBzaXplID4gMCk7CiAgICAg
fQogCiAgICAgZm9yICg7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXImIHJlZ2lzdGVyZWRMaXN0ZW5lciA9IGVudHJ5W2ldOwotICAgICAgICBpZiAoZXZl
bnQtPmV2ZW50UGhhc2UoKSA9PSBFdmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmICFyZWdpc3RlcmVk
TGlzdGVuZXIudXNlQ2FwdHVyZSkKKyAgICAgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UoKSA9PSBF
dmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmICFyZWdpc3RlcmVkTGlzdGVuZXIudXNlQ2FwdHVyZSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZXZlbnQtPmV2ZW50UGhhc2UoKSA9
PSBFdmVudDo6QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUp
CisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJVQkJMSU5HX1BIQVNF
ICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgLy8gSWYgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIGhhcyBiZWVuIGNhbGxl
ZCwgd2UganVzdCBicmVhayBvdXQgaW1tZWRpYXRlbHksIHdpdGhvdXQKICAgICAgICAgLy8gaGFu
ZGxpbmcgYW55IG1vcmUgZXZlbnRzIG9uIHRoaXMgdGFyZ2V0LgotICAgICAgICBpZiAoZXZlbnQt
PmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBpZiAoZXZlbnQuaW1tZWRp
YXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsSGFuZGxlRXZlbnQoY29udGV4dCwgKmV2ZW50KTsKKyAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbEhhbmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKICAgICAgICAgLy8gVG8gbWF0Y2gg
TW96aWxsYSwgdGhlIEFUX1RBUkdFVCBwaGFzZSBmaXJlcyBib3RoIGNhcHR1cmluZyBhbmQgYnVi
YmxpbmcKICAgICAgICAgLy8gZXZlbnQgbGlzdGVuZXJzLCBldmVuIHRob3VnaCB0aGF0IHZpb2xh
dGVzIHNvbWUgdmVyc2lvbnMgb2YgdGhlIERPTSBzcGVjLgotICAgICAgICByZWdpc3RlcmVkTGlz
dGVuZXIubGlzdGVuZXItPmhhbmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKKyAgICAgICAgcmVn
aXN0ZXJlZExpc3RlbmVyLmxpc3RlbmVyLT5oYW5kbGVFdmVudChjb250ZXh0LCAmZXZlbnQpOwog
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KGNvb2tpZSk7
CiAgICAgfQogICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5yZW1vdmVMYXN0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCmluZGV4IDY4OGU2ZmY3MGI5MmNiNjg5M2JjOTlkZTc5MGYwNjg5
ZDdhNzkyZWYuLjcwNzc3NzQxYTdjNGZhMjcxZjAzZWFjMjNlYzc0NmZiOWM1NmEzY2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5oCkBAIC0xMjMsOCArMTIzLDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICB2aXJ0dWFs
IGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
RXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUFsbEV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pOwotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiwgRXhjZXB0aW9uQ29kZSYpOyAvLyBET00gQVBJCisgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnQmKTsKKyAgICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQqLCBFeGNlcHRpb25D
b2RlJik7IC8vIERPTSBBUEkKICAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRpb25JbkV2
ZW50SGFuZGxlcigpOwogCiAgICAgLy8gVXNlZCBmb3IgbGVnYWN5ICJvbkV2ZW50IiBhdHRyaWJ1
dGUgQVBJcy4KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNDYXB0dXJp
bmdFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAgICAgY29u
c3QgRXZlbnRMaXN0ZW5lclZlY3RvciYgZ2V0RXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpOwogCi0gICAgYm9vbCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQqKTsK
KyAgICBib29sIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYpOwogICAgIGJvb2wgaXNGaXJpbmdF
dmVudExpc3RlbmVycygpOwogCiAgICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpT
bG90VmlzaXRvciYpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIHJlZkV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFy
Z2V0KCkgPSAwOwogICAgIAotICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiwgRXZl
bnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYpOworICAgIHZvaWQgZmlyZUV2ZW50
TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYp
OwogCiAgICAgZnJpZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0dlbmVyaWNFdmVudFF1ZXVlLmNwcAppbmRleCA3MmRkMGZlZWQwMmFlMmRjN2M5
ZjNmZDZjZDdjZGE5OTMxNmMzOTJhLi5kYmE4NTI3MGRiNDc5NGY2ZmFiMjNhMjZiMzlmMWNiNTk0
YjFkZDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9HZW5lcmljRXZlbnRRdWV1ZS5jcHAKQEAgLTEw
MCw3ICsxMDAsNyBAQCB2b2lkIEdlbmVyaWNFdmVudFF1ZXVlOjpkaXNwYXRjaE9uZUV2ZW50KCkK
ICAgICBSZWY8RXZlbnRUYXJnZXQ+IHByb3RlY3QobV9vd25lcik7CiAgICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IG1fcGVuZGluZ0V2ZW50cy50YWtlRmlyc3QoKTsKICAgICBFdmVudFRhcmdldCYg
dGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpID8gKmV2ZW50LT50YXJnZXQoKSA6IG1fb3duZXI7Ci0g
ICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKKyAgICB0YXJnZXQuZGlz
cGF0Y2hFdmVudCgqZXZlbnQpOwogfQogCiB2b2lkIEdlbmVyaWNFdmVudFF1ZXVlOjpjbG9zZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCBjMzI1Njg0NGY0ODQ1OGU5YmM3NDdj
YzBlOWQ5ZDM3NTA3OGQ4ZWIwLi5hM2FiODk2YmY1M2NmOGEwN2RlNWU5MmZlOTY3NzQ5M2E2Zjk0
M2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTE2MCw5ICsxNjAsOCBAQCB2
b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPSBNZXNz
YWdlUG9ydDo6ZW50YW5nbGVQb3J0cygqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXVEY6Om1v
dmUoY2hhbm5lbHMpKTsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6
OmNyZWF0ZShXVEY6Om1vdmUocG9ydHMpLCBtZXNzYWdlLnJlbGVhc2UoKSk7Ci0KLSAgICAgICAg
ZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAg
ICAgUmVmPEV2ZW50PiBldmVudCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFdURjo6bW92ZShwb3J0
cyksIG1lc3NhZ2UucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMzg3Y2FlYjBmNTNiYzEyYjg0OTYzMDBmOWI4
MzhlN2JhOWJiMjk3NC4uMDhmYTAyNDZhNTMzYTUyODJlMzQ2Y2FlMTY0YWIyZWI0YTUwYTU4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcApAQCAtMjA5MCwxOSArMjA5MCwxOSBAQCB2b2lkIE5vZGU6OmhhbmRs
ZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpICYm
IGRvd25jYXN0PEVsZW1lbnQ+KCp0aGlzKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiBldmVu
dC5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlyZUV2ZW50TGlzdGVu
ZXJzKCZldmVudCk7CisgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIH0KIAotdm9pZCBO
b2RlOjpkaXNwYXRjaFNjb3BlZEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBO
b2RlOjpkaXNwYXRjaFNjb3BlZEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQoKnRoaXMsIGV2ZW50KTsKIH0KIAotYm9vbCBOb2Rl
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBOb2RlOjpkaXNw
YXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAh
UExBVEZPUk0oSU9TKQotICAgIGlmIChpczxUb3VjaEV2ZW50PigqZXZlbnQpKQotICAgICAgICBy
ZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFkb3B0UmVmKGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2
ZW50LmxlYWtSZWYoKSkpKTsKKyAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpKQorICAgICAg
ICByZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KSk7
CiAjZW5kaWYKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMs
IGV2ZW50KTsKIH0KQEAgLTIxMjYsMjQgKzIxMjYsMjQgQEAgdm9pZCBOb2RlOjpkaXNwYXRjaFN1
YnRyZWVNb2RpZmllZEV2ZW50KCkKIGJvb2wgTm9kZTo6ZGlzcGF0Y2hET01BY3RpdmF0ZUV2ZW50
KGludCBkZXRhaWwsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKIHsKICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9u
Ojppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgUmVmUHRyPFVJRXZlbnQ+IGV2ZW50
ID0gVUlFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50LCB0cnVlLCB0
cnVlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIGRldGFpbCk7CisgICAgUmVmPFVJRXZlbnQ+
IGV2ZW50ID0gVUlFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50LCB0
cnVlLCB0cnVlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIGRldGFpbCk7CiAgICAgZXZlbnQt
PnNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQpOwogICAgIGRpc3BhdGNoU2NvcGVk
RXZlbnQoZXZlbnQpOwogICAgIHJldHVybiBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKTsKIH0KIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFQTEFURk9STShJT1MpCi1ib29sIE5vZGU6OmRp
c3BhdGNoVG91Y2hFdmVudChQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+IGV2ZW50KQorYm9vbCBOb2Rl
OjpkaXNwYXRjaFRvdWNoRXZlbnQoVG91Y2hFdmVudCYgZXZlbnQpCiB7CiAgICAgcmV0dXJuIEV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVudCk7CiB9CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShJTkRJRV9VSSkKLWJvb2wgTm9kZTo6ZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChQ
YXNzUmVmUHRyPFVJUmVxdWVzdEV2ZW50PiBldmVudCkKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hVSVJl
cXVlc3RFdmVudChVSVJlcXVlc3RFdmVudCYgZXZlbnQpCiB7CiAgICAgRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZW50KHRoaXMsIGV2ZW50KTsKLSAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkgfHwgZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gZXZlbnQu
ZGVmYXVsdEhhbmRsZWQoKSB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAjZW5kaWYK
ICAgICAKQEAgLTIxNTMsOCArMjE1Myw4IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hCZWZvcmVMb2Fk
RXZlbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgUmVmPE5vZGU+IHByb3RlY3QoKnRoaXMpOwotICAgIFJlZlB0cjxCZWZvcmVMb2FkRXZlbnQ+
IGJlZm9yZUxvYWRFdmVudCA9IEJlZm9yZUxvYWRFdmVudDo6Y3JlYXRlKHNvdXJjZVVSTCk7Ci0g
ICAgZGlzcGF0Y2hFdmVudChiZWZvcmVMb2FkRXZlbnQuZ2V0KCkpOworICAgIFJlZjxCZWZvcmVM
b2FkRXZlbnQ+IGJlZm9yZUxvYWRFdmVudCA9IEJlZm9yZUxvYWRFdmVudDo6Y3JlYXRlKHNvdXJj
ZVVSTCk7CisgICAgZGlzcGF0Y2hFdmVudChiZWZvcmVMb2FkRXZlbnQpOwogICAgIHJldHVybiAh
YmVmb3JlTG9hZEV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4
IGVmZjA4NmE1YmVlMmUwYmY4NWI3N2FjODdlYmMyMWE1MDc1M2FiZDcuLjdiNThmNGY4ZDIzYThk
YTIxOWY4Yzk0ZjgzZmI3OWFjNWE0OTIyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNTE5LDkgKzUxOSw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSkg
b3ZlcnJpZGU7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2
aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAotICAgIHZv
aWQgZGlzcGF0Y2hTY29wZWRFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBkaXNw
YXRjaFNjb3BlZEV2ZW50KEV2ZW50Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxF
dmVudHMoRXZlbnQmKTsKIApAQCAtNTMzLDEwICs1MzMsMTAgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGJvb2wgZGlz
cGF0Y2hUb3VjaEV2ZW50KFBhc3NSZWZQdHI8VG91Y2hFdmVudD4pOworICAgIGJvb2wgZGlzcGF0
Y2hUb3VjaEV2ZW50KFRvdWNoRXZlbnQmKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTkRJRV9VSSkK
LSAgICBib29sIGRpc3BhdGNoVUlSZXF1ZXN0RXZlbnQoUGFzc1JlZlB0cjxVSVJlcXVlc3RFdmVu
dD4pOworICAgIGJvb2wgZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChVSVJlcXVlc3RFdmVudCYpOwog
I2VuZGlmCiAKICAgICBib29sIGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1
ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcAppbmRleCAy
MGYxOGNkNGMyY2I4NzJlNjc2ZGM3MTUzNjc1ZjVlOWViODQ2ZjM5Li45MzUwMTMyMzQ4NGEzNTQ0
MzhmNDFkYTFiMzk3MDAzYWE5ZDk3YTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NvcGVkRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50
UXVldWUuY3BwCkBAIC00MywyNyArNDMsMjcgQEAgU2NvcGVkRXZlbnRRdWV1ZSYgU2NvcGVkRXZl
bnRRdWV1ZTo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gc2NvcGVkRXZlbnRRdWV1ZTsKIH0KIAot
dm9pZCBTY29wZWRFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQpCit2b2lkIFNjb3BlZEV2ZW50UXVldWU6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZl
bnQpCiB7CiAgICAgaWYgKG1fc2NvcGluZ0xldmVsKQotICAgICAgICBtX3F1ZXVlZEV2ZW50cy5h
cHBlbmQoZXZlbnQpOworICAgICAgICBtX3F1ZXVlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2
ZW50KSk7CiAgICAgZWxzZQogICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAotdm9p
ZCBTY29wZWRFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KSBjb25zdAordm9pZCBTY29wZWRFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVu
dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsKKyAgICBBU1NFUlQoZXZl
bnQudGFyZ2V0KCkpOwogICAgIC8vIFN0b3JlIHRoZSB0YXJnZXQgaW4gYSBsb2NhbCB2YXJpYWJs
ZSB0byBhdm9pZCBwb3NzaWJseSBkZXJlZmVyZW5jaW5nIGEgbnVsbGlmaWVkIFBhc3NSZWZQdHIg
YWZ0ZXIgaXQncyBwYXNzZWQgb24uCi0gICAgTm9kZSogbm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+
dG9Ob2RlKCk7CisgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldCgpLT50b05vZGUoKTsKICAg
ICBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQobm9kZSwgZXZlbnQpOwogfQogCiB2b2lk
IFNjb3BlZEV2ZW50UXVldWU6OmRpc3BhdGNoQWxsRXZlbnRzKCkKIHsKLSAgICBWZWN0b3I8UmVm
UHRyPEV2ZW50Pj4gcXVldWVkRXZlbnRzID0gV1RGOjptb3ZlKG1fcXVldWVkRXZlbnRzKTsKKyAg
ICBWZWN0b3I8UmVmPEV2ZW50Pj4gcXVldWVkRXZlbnRzID0gV1RGOjptb3ZlKG1fcXVldWVkRXZl
bnRzKTsKICAgICBmb3IgKGF1dG8mIHF1ZXVlZEV2ZW50IDogcXVldWVkRXZlbnRzKQotICAgICAg
ICBkaXNwYXRjaEV2ZW50KHF1ZXVlZEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNo
RXZlbnQocXVldWVkRXZlbnQpOwogfQogCiB2b2lkIFNjb3BlZEV2ZW50UXVldWU6OmluY3JlbWVu
dFNjb3BpbmdMZXZlbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZl
bnRRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuaAppbmRleCBj
ZjZiMjljOGQ5OTEzN2IwNWVjNjRlNjA0N2YzNDJlNWEyN2RmY2IwLi43OGJiYzY1ZjM5YWRkMzdk
NDIxYmUwNDJlMzA5ZjliZmFiMDUxNzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NvcGVkRXZlbnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1
ZXVlLmgKQEAgLTQ2LDE4ICs0NiwxOCBAQCBjbGFzcyBTY29wZWRFdmVudFF1ZXVlIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRFdmVudFF1ZXVlKTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIFNjb3BlZEV2ZW50UXVldWUmIHNpbmdsZXRvbigp
OwotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVu
cXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOwogCiBwcml2YXRlOgogICAgIFNjb3BlZEV2ZW50UXVl
dWUoKSA9IGRlZmF1bHQ7CiAgICAgflNjb3BlZEV2ZW50UXVldWUoKSA9IGRlbGV0ZTsKIAotICAg
IHZvaWQgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PikgY29uc3Q7CisgICAgdm9pZCBk
aXNwYXRjaEV2ZW50KEV2ZW50JikgY29uc3Q7CiAgICAgdm9pZCBkaXNwYXRjaEFsbEV2ZW50cygp
OwogICAgIHZvaWQgaW5jcmVtZW50U2NvcGluZ0xldmVsKCk7CiAgICAgdm9pZCBkZWNyZW1lbnRT
Y29waW5nTGV2ZWwoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3F1ZXVlZEV2ZW50
czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9xdWV1ZWRFdmVudHM7CiAgICAgdW5zaWduZWQg
bV9zY29waW5nTGV2ZWwgeyAwIH07CiAKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ry
b3llZDxXZWJDb3JlOjpTY29wZWRFdmVudFF1ZXVlPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCA0MmY1ZTc5OTM5MmY1MWZjNzlkZGQxMTM1
MzM5MmFlNDc2YmMyZWZiLi5mMDUyZDg2ZWI1NDUwYzI3MDM4YmQ1NGNkZGQ1NmM4Yzg1ZDA5OWY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBA
IC00MDQsNyArNDA0LDcgQEAgYm9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaXNwYXRjaEVy
cm9yRXZlbnQoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludAogCiAgICAgQVNTRVJUKCFt
X2luRGlzcGF0Y2hFcnJvckV2ZW50KTsKICAgICBtX2luRGlzcGF0Y2hFcnJvckV2ZW50ID0gdHJ1
ZTsKLSAgICBSZWZQdHI8RXJyb3JFdmVudD4gZXJyb3JFdmVudCA9IEVycm9yRXZlbnQ6OmNyZWF0
ZShtZXNzYWdlLCBzb3VyY2VOYW1lLCBsaW5lLCBjb2x1bW4pOworICAgIFJlZjxFcnJvckV2ZW50
PiBlcnJvckV2ZW50ID0gRXJyb3JFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsIHNvdXJjZU5hbWUsIGxp
bmUsIGNvbHVtbik7CiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGVycm9yRXZlbnQpOwogICAg
IG1faW5EaXNwYXRjaEVycm9yRXZlbnQgPSBmYWxzZTsKICAgICByZXR1cm4gZXJyb3JFdmVudC0+
ZGVmYXVsdFByZXZlbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggNjg5Mzc3MGVlMDFkNmRiNWZhOTZlMTJh
NDcwMzExMTZkYzNiMzk3ZS4uYjcxZjk3M2U3ZTMwMWJlZDA0MTc3YWI3NmFhYWIwYTMxZTZjNTdm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCkBAIC02ODIsMTAgKzY4MiwxMCBAQCBib29sIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZl
YwogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKICAgICAgICAgdmll
dy0+ZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigp
OwogCi0gICAgUmVmUHRyPFRleHRFdmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRp
Y3RhdGlvbihtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0LCBkaWN0YXRpb25B
bHRlcm5hdGl2ZXMpOworICAgIFJlZjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVh
dGVGb3JEaWN0YXRpb24obV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHRyaWdn
ZXJpbmdFdmVudCk7CiAKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9F
WENFUFRJT04pOworICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgcmV0dXJu
IGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
aW5kZXggYWY1Mjg2ZGM5MWVhZmVlYWEwYWFiNmE5NjVmNDZmN2M5ODI1MGRlYy4uY2YxYmUyYWJl
NjRmYTc0NmFlNmIxMDViNDY0MTc4MGI3NDUwZTUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcApAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNv
bnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQogICAgIE5vZGUqIHRh
cmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkK
ICAgICAgICAgcmV0dXJuOwotICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNy
ZWF0ZUZvclBsYWluVGV4dFBhc3RlKGRvY3VtZW50KCkuZG9tV2luZG93KCksIHBhc3RpbmdUZXh0
LCBzbWFydFJlcGxhY2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICB0YXJnZXQtPmRpc3BhdGNo
RXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JQbGFpblRleHRQYXN0ZShkb2N1bWVudCgpLmRvbVdp
bmRvdygpLCBwYXN0aW5nVGV4dCwgc21hcnRSZXBsYWNlKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpw
YXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBwYXN0aW5nRnJhZ21l
bnQsIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUsIE1haWxCbG9ja3F1b3RlSGFu
ZGxpbmcgcmVzcGVjdHNNYWlsQmxvY2txdW90ZSkKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEVk
aXRvcjo6cGFzdGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcGFzdGlu
Z0ZyYWdtZW50LCBib29sCiAgICAgTm9kZSogdGFyZ2V0ID0gZmluZEV2ZW50VGFyZ2V0RnJvbVNl
bGVjdGlvbigpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47Ci0gICAgdGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yRnJhZ21lbnRQYXN0ZShkb2N1bWVu
dCgpLmRvbVdpbmRvdygpLCBwYXN0aW5nRnJhZ21lbnQsIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHls
ZSwgcmVzcGVjdHNNYWlsQmxvY2txdW90ZSksIElHTk9SRV9FWENFUFRJT04pOworICAgIHRhcmdl
dC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckZyYWdtZW50UGFzdGUoZG9jdW1l
bnQoKS5kb21XaW5kb3coKSwgcGFzdGluZ0ZyYWdtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5
bGUsIHJlc3BlY3RzTWFpbEJsb2NrcXVvdGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQ
bGFpblRleHRCeXBhc3NpbmdESFRNTCgpCkBAIC04NTEsOCArODUxLDggQEAgYm9vbCBFZGl0b3I6
OmRpc3BhdGNoQ1BQRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERhdGFUcmFu
c2ZlckFjY2Vzc1AKIAogICAgIFJlZlB0cjxEYXRhVHJhbnNmZXI+IGRhdGFUcmFuc2ZlciA9IERh
dGFUcmFuc2Zlcjo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKHBvbGljeSk7CiAKLSAgICBSZWZQdHI8
RXZlbnQ+IGV2ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHRydWUsIHRy
dWUsIGRhdGFUcmFuc2Zlcik7Ci0gICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJR05P
UkVfRVhDRVBUSU9OKTsKKyAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNy
ZWF0ZShldmVudFR5cGUsIHRydWUsIHRydWUsIGRhdGFUcmFuc2Zlcik7CisgICAgdGFyZ2V0LT5k
aXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICBib29sIG5vRGVmYXVsdFByb2Nlc3NpbmcgPSBldmVu
dC0+ZGVmYXVsdFByZXZlbnRlZCgpOwogICAgIGlmIChub0RlZmF1bHRQcm9jZXNzaW5nICYmIHBv
bGljeSA9PSBEYXRhVHJhbnNmZXJBY2Nlc3NQb2xpY3k6OldyaXRhYmxlKSB7CiAgICAgICAgIGF1
dG8gcGFzdGVib2FyZCA9IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwpAQCAt
MTAxMiw5ICsxMDEyLDkgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnRzKFBhc3NSZWZQdHI8RWxlbWVudD4gcHJwU3RhcnRSb28KICAgICBSZWZQdHI8RWxl
bWVudD4gc3RhcnRSb290ID0gcHJwU3RhcnRSb290OwogICAgIFJlZlB0cjxFbGVtZW50PiBlbmRS
b290ID0gcHJwRW5kUm9vdDsKICAgICBpZiAoc3RhcnRSb290KQotICAgICAgICBzdGFydFJvb3Qt
PmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVD
b250ZW50Q2hhbmdlZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAg
ICAgICAgc3RhcnRSb290LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAg
aWYgKGVuZFJvb3QgJiYgZW5kUm9vdCAhPSBzdGFydFJvb3QpCi0gICAgICAgIGVuZFJvb3QtPmRp
c3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250
ZW50Q2hhbmdlZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgZW5kUm9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJr
aXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiB2b2lk
IEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4g
Y21kKQpAQCAtMTcyMCw4ICsxNzIwLDggQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNv
bnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgLy8gV2Ugc2hv
dWxkIHNlbmQgdGhpcyBldmVudCBiZWZvcmUgc2VuZGluZyBhIFRleHRFdmVudCBhcyB3cml0dGVu
IGluIFNlY3Rpb24gNi4yLjIgYW5kIDYuMi4zIG9mCiAgICAgLy8gdGhlIERPTSBFdmVudCBzcGVj
aWZpY2F0aW9uLgogICAgIGlmIChFbGVtZW50KiB0YXJnZXQgPSBkb2N1bWVudCgpLmZvY3VzZWRF
bGVtZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPENvbXBvc2l0aW9uRXZlbnQ+IGV2ZW50ID0gQ29t
cG9zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBk
b2N1bWVudCgpLmRvbVdpbmRvdygpLCB0ZXh0KTsKLSAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2
ZW50KGV2ZW50LnJlbGVhc2UoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIFJlZjxDb21w
b3NpdGlvbkV2ZW50PiBldmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuY29tcG9zaXRpb25lbmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7Cisg
ICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgfQogCiAgICAgLy8gSWYg
dGV4dCBpcyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJlLiAgSWYg
dGV4dCBpcyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dApAQCAtMTc5NSw4ICsx
Nzk1LDggQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBldmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
Y29tcG9zaXRpb25lbmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LmdldCgpKQotICAgICAgICAgICAgdGFyZ2V0LT5kaXNw
YXRjaEV2ZW50KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKGV2ZW50KQor
ICAgICAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KCpldmVudCk7CiAgICAgfQogCiAgICAg
Ly8gSWYgdGV4dCBpcyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJl
LiAgSWYgdGV4dCBpcyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCA1YjY4ZjU3Y2ZhYzBiYmNhOWYxOGI0MmIxYTVhYjBiMTVmYmM4NThiLi43ODk3MmM3NTIyNmJk
ZjU0Y2I3NDU0OTcyNzg3NjNkYzQ3MmEwM2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTgyLDE2ICsxODIsMTYgQEAg
UmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudCYgZG9jdW1l
bnQsIERvY3VtZW50RnJhZ21lbnQqIGYKICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmlu
Z05vZGVzVG9GcmFnbWVudChob2xkZXIuZ2V0KCkpOwogCiAgICAgLy8gR2l2ZSB0aGUgcm9vdCBh
IGNoYW5jZSB0byBjaGFuZ2UgdGhlIHRleHQuCi0gICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50PiBldnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOwotICAg
IGVkaXRhYmxlUm9vdC0+ZGlzcGF0Y2hFdmVudChldnQsIEFTU0VSVF9OT19FWENFUFRJT04pOwot
ICAgIGlmICh0ZXh0ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhhc1JpY2hseUVk
aXRhYmxlU3R5bGUoKSkgeworICAgIFJlZjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQg
PSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOworICAgIGVkaXRhYmxlUm9v
dC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgaWYgKHRleHQgIT0gZXZlbnQtPnRleHQoKSB8
fCAhZWRpdGFibGVSb290LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgcmVz
dG9yZUFuZFJlbW92ZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsK
IAogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldnQtPnRleHQo
KSk7CisgICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwg
ZXZlbnQtPnRleHQoKSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAKaW5kZXggZmQ3MjE5ZDYwYTNhOGZmYTY2NmUwMTVl
NWRhMTA1MmIyNmNjMWM1Yy4uY2NjM2RkZWFlMmU3ZTg1NmJmZDIzODNmZmVlZDUxMGMxNTQ3OGI3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VD
b21tYW5kLmNwcApAQCAtNjMsOSArNjMsOSBAQCBTdHJpbmcgZGlzcGF0Y2hCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAg
IGlmIChOb2RlKiBzdGFydE5vZGUgPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uc3RhcnQoKS5jb250
YWluZXJOb2RlKCkpIHsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICAvLyBTZW5kIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LiBUaGUg
ZXZlbnQgaGFuZGxlciB3aWxsIHVwZGF0ZSB0ZXh0IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAg
IFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZ0ID0gQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQ6OmNyZWF0ZSh0ZXh0KTsKLSAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpLT5kaXNwYXRjaEV2ZW50KGV2dCwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAg
ICAgICBuZXdUZXh0ID0gZXZ0LT50ZXh0KCk7CisgICAgICAgICAgICBSZWY8QmVmb3JlVGV4dElu
c2VydGVkRXZlbnQ+IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZSh0ZXh0
KTsKKyAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5kaXNwYXRj
aEV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIG5ld1RleHQgPSBldmVudC0+dGV4dCgpOwogICAg
ICAgICB9CiAgICAgfQogICAgIHJldHVybiBuZXdUZXh0OwpAQCAtNzcsOCArNzcsOCBAQCBib29s
IGNhbkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudDo6Y3JlYXRlKFN0cmluZygiXG4iKSk7Ci0gICAgbm9kZS0+ZGlzcGF0Y2hFdmVu
dChldmVudCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgUmVmPEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50PiBldmVudCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUoU3RyaW5nKCJcbiIp
KTsKKyAgICBub2RlLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPnRl
eHQoKS5sZW5ndGgoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKaW5kZXggOTU3YTk3ZWFhMjQzNzg0Y2JmNTMyOGNkZWU3MTMwZjg0NjZlMmQ4YS4uMGFkNjFm
MzdlYzIxY2I0MWE4MTI2ZWUzNDYzNDI2NTA2NmFkMmQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC01MTIwLDEwICs1MTIwLDkgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFu
Z2VkKE1lZGlhUGwKICAgICB1cGRhdGVNZWRpYVN0YXRlKFVwZGF0ZU1lZGlhU3RhdGU6OkFzeW5j
aHJvbm91c2x5KTsKIH0KIAotYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQorYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRj
aEV2ZW50KEV2ZW50JiBldmVudCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZl
bnQ7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRw
bGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2No
YW5nZWRFdmVudCkKICAgICAgICAgc2NoZWR1bGVEZWxheWVkQWN0aW9uKENoZWNrUGxheWJhY2tU
YXJnZXRDb21wYXRhYmxpdHkpOwogICAgIHJldHVybiBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hFdmVu
dChldmVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDA1
MGFjYjQ2MDcxYTRmZWM1NGFmMWM2ZmU3ZjMxZjBhZTE5ODA1OTMuLmEwM2YyYzRmYzZmZGVmNmYy
ZWE3ZjJmNGUzZTA4NTY1YWVlZmZiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCkBAIC01NjQsNyArNTY0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVucXVldWVQbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVudCgpOwogCiAgICAgdXNpbmcgRXZlbnRU
YXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50
KEV2ZW50Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKaW5kZXggZDZiMWY5YTZlYjRk
NzJkOTllMGFkOTFiODUyNGI5ZDRmOGM0NTE0NS4uYjNlYjNiODA0ZWRiNDNjNWU3OGI4ZTRjZGU3
MTljZTBjYmRlMmM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3Bw
CkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpkaWRDb21wbGV0ZUxv
YWQoTG9hZFN0YXR1cyBzdGF0dXMpCiAKICAgICBpZiAoc3RhdHVzID09IEZhaWx1cmUpIHsKICAg
ICAgICAgc2V0UmVhZHlTdGF0ZShIVE1MVHJhY2tFbGVtZW50OjpUUkFDS19FUlJPUik7Ci0gICAg
ICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwg
ZmFsc2UsIGZhbHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGRpc3BhdGNoRXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIEhUTUxUcmFj
a0VsZW1lbnQ6OmRpZENvbXBsZXRlTG9hZChMb2FkU3RhdHVzIHN0YXR1cykKIAogICAgIC8vICAg
ICAyLiBJZiB0aGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCwgZmlyZSBhIHNpbXBs
ZSBldmVudCBuYW1lZCBsb2FkIGF0IHRoZSAKICAgICAvLyAgICAgICAgdHJhY2sgZWxlbWVudC4K
LSAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwg
ZmFsc2UsIGZhbHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgZGlzcGF0Y2hFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiAv
LyBOT1RFOiBUaGUgdmFsdWVzIGluIHRoZSBUZXh0VHJhY2s6OlJlYWRpbmVzc1N0YXRlIGVudW0g
bXVzdCBzdGF5IGluIHN5bmMgd2l0aCB0aG9zZSBpbiBIVE1MVHJhY2tFbGVtZW50OjpSZWFkeVN0
YXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCmluZGV4IDk2MzcyNDQ2
NzY4NzQwNGVkNjJlZTM3ZDAxNGVmNGQ2NTMzNzA3MjEuLmRiYjAyYWI5ZTk0OTEyMTk0NmEwMGVi
YWQ3M2ExODIwYzdmMTZiMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5j
cHAKQEAgLTU0NCwxMSArNTQ0LDExIEBAIHZvaWQgTWVkaWFDb250cm9sbGVyOjpzY2hlZHVsZUV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKQogCiB2b2lkIE1lZGlhQ29udHJvbGxl
cjo6YXN5bmNFdmVudFRpbWVyRmlyZWQoKQogewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBw
ZW5kaW5nRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBwZW5kaW5nRXZlbnRzOwogCiAg
ICAgbV9wZW5kaW5nRXZlbnRzLnN3YXAocGVuZGluZ0V2ZW50cyk7CiAgICAgZm9yIChhdXRvJiBw
ZW5kaW5nRXZlbnQgOiBwZW5kaW5nRXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRp
bmdFdmVudC5yZWxlYXNlKCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBkaXNwYXRjaEV2
ZW50KHBlbmRpbmdFdmVudCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sbGVyOjpjbGVhclBvc2l0
aW9uVGltZXJGaXJlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29u
dHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaAppbmRleCA3
NTMzYjQ4YzI3OGY1ZDYxYzVmNmUwMjJjZTc0YzM2MTg1Njg0MmJjLi4zMTVlZWNkMTkxYTNjNjc5
YTEyMjBjYzBmNmQ5YjgzY2QwZjI1MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L01lZGlhQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9s
bGVyLmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tdXRlZDsKICAg
ICBSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKICAgICBQbGF5YmFja1N0YXRlIG1fcGxheWJhY2tT
dGF0ZTsKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9wZW5kaW5nRXZlbnRzOworICAgIFZl
Y3RvcjxSZWY8RXZlbnQ+PiBtX3BlbmRpbmdFdmVudHM7CiAgICAgVGltZXIgbV9hc3luY0V2ZW50
VGltZXI7CiAgICAgbXV0YWJsZSBUaW1lciBtX2NsZWFyUG9zaXRpb25UaW1lcjsKICAgICBTdHJp
bmcgbV9tZWRpYUdyb3VwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCAzMzBjOTUwNGIwNzY5ZDk0MDcy
MzE3ZGRkMjk5M2QyOThiOWY5YWRjLi5lZDMwNDlkMzg2NjY0OTQ1ZTA5OWQ2NjNkYTgyOWRiNjU5
MjM4ZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtNDc2Niw3ICs0NzY2LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2lt
dWxhdGlvbigpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250
ZXh0TG9zdEV2ZW50KCkKIHsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0g
V2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2
ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOworICAgIFJlZjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQg
PSBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0
RXZlbnQsIGZhbHNlLCB0cnVlLCAiIik7CiAgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZl
bnQpOwogICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwog
ICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3Jl
QWxsb3dlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3Jp
cHRSdW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5jcHAKaW5kZXggZWVhMGVjNzU3NWQ3NzNjOGI0OTU1NWI4NmQ2NGI5ODAzZmVmYWNiOC4uZWRi
MDYyNzJjYzgwMTk0Nzk4YmZhMmZlZjBiNGIwNDFiYWQxYWZkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAg
c3RhdGljIFVSTCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihEb2N1bWVudCogZG9jdW1l
bnQpCiAgICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKTsKIH0K
IAotaW5saW5lIFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpCitpbmxp
bmUgUmVmPEV2ZW50PiBjcmVhdGVTY3JpcHRMb2FkRXZlbnQoKQogewogICAgIHJldHVybiBFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKaW5kZXggYzI0NThkMjVlYTk0
ODNmNGQ4NmE2M2M1MDg2NzY1ZDVmNTYzOGUxNC4uYTZiMWRiYjg4NDRlNzMxMWM1NmE4NGI4NWIz
OGQzNzcxYjEzNjEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3Vl
LmNwcApAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjppbnZhbGlkYXRlQ3Vl
SW5kZXgoKQogICAgIG1fY3VlSW5kZXggPSBpbnZhbGlkQ3VlSW5kZXg7CiB9CiAKLWJvb2wgVGV4
dFRyYWNrQ3VlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBU
ZXh0VHJhY2tDdWU6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIC8vIFdoZW4g
YSBUZXh0VHJhY2sncyBtb2RlIGlzIGRpc2FibGVkOiBubyBjdWVzIGFyZSBhY3RpdmUsIG5vIGV2
ZW50cyBmaXJlZC4KICAgICBpZiAoIXRyYWNrKCkgfHwgdHJhY2soKS0+bW9kZSgpID09IFRleHRU
cmFjazo6ZGlzYWJsZWRLZXl3b3JkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RleHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuaAppbmRleCBlYzJhYjIyZTJmNzYzZTg0MDdmYTNkMTg5ZDk2ZGJjMGU4ZDZjYjgyLi42
NGU2ZmQyNTBiY2YxYjM5OWRjMjMzZTNmNDEyMWVkYTg4Y2E1ZDcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAg
IHZvaWQgaW52YWxpZGF0ZUN1ZUluZGV4KCk7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlz
cGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBv
dmVycmlkZTsKIAogICAgIGJvb2wgaXNBY3RpdmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNB
Y3RpdmUoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA5ZDA2
MTk5NmQ3NzM2ZDY5YTAxNmJiMDUyN2U4ZDM1ZDM1MDE2MWU2Li42OGRlZDIzMTUzZTA3NmNlMWZk
MTZmYmI1ZDNmZTJmMTlkYTI5YTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKQEAgLTI4NTksNyArMjg1OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmhhbmRsZVVubG9hZEV2
ZW50cyhVbmxvYWRFdmVudFBvbGljeSB1bmxvYWRFdmVudFBvbGljeSkKICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY3NzAKIAogICAgICAg
ICAgICAgaWYgKCFtX2ZyYW1lLmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8RXZlbnQ+IHVubG9hZEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBSZWY8RXZl
bnQ+IHVubG9hZEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBm
YWxzZSwgZmFsc2UpKTsKICAgICAgICAgICAgICAgICAvLyBUaGUgRG9jdW1lbnRMb2FkZXIgKGFu
ZCB0aHVzIGl0cyBEb2N1bWVudExvYWRUaW1pbmcpIG1pZ2h0IGdldCBkZXN0cm95ZWQKICAgICAg
ICAgICAgICAgICAvLyB3aGlsZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQsIHNvIHByb3RlY3QgaXQg
dG8gcHJldmVudCB3cml0aW5nIHRoZSBlbmQKICAgICAgICAgICAgICAgICAvLyB0aW1lIGludG8g
ZnJlZWQgbWVtb3J5LgpAQCAtMjkwNSwxOCArMjkwNSwxOCBAQCBib29sIEZyYW1lTG9hZGVyOjpo
YW5kbGVCZWZvcmVVbmxvYWRFdmVudChDaHJvbWUmIGNocm9tZSwgRnJhbWVMb2FkZXIqIGZyYW1l
TG9hZAogICAgIGlmICghZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIAotICAgIFJlZlB0cjxCZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2Fk
RXZlbnQgPSBCZWZvcmVVbmxvYWRFdmVudDo6Y3JlYXRlKCk7CisgICAgUmVmPEJlZm9yZVVubG9h
ZEV2ZW50PiBiZWZvcmVVbmxvYWRFdmVudCA9IEJlZm9yZVVubG9hZEV2ZW50OjpjcmVhdGUoKTsK
ICAgICBtX3BhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IFBhZ2VEaXNtaXNzYWxU
eXBlOjpCZWZvcmVVbmxvYWQ7CiAKICAgICB7CiAgICAgICAgIEZvcmJpZFByb21wdHNTY29wZSBm
b3JiaWRQcm9tcHRzKG1fZnJhbWUucGFnZSgpKTsKLSAgICAgICAgZG9tV2luZG93LT5kaXNwYXRj
aEV2ZW50KGJlZm9yZVVubG9hZEV2ZW50LmdldCgpLCBkb21XaW5kb3ctPmRvY3VtZW50KCkpOwor
ICAgICAgICBkb21XaW5kb3ctPmRpc3BhdGNoRXZlbnQoYmVmb3JlVW5sb2FkRXZlbnQsIGRvbVdp
bmRvdy0+ZG9jdW1lbnQoKSk7CiAgICAgfQogCiAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWlu
Z0Rpc3BhdGNoZWQgPSBQYWdlRGlzbWlzc2FsVHlwZTo6Tm9uZTsKIAogICAgIGlmICghYmVmb3Jl
VW5sb2FkRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSkKLSAgICAgICAgZG9jdW1lbnQtPmRlZmF1
bHRFdmVudEhhbmRsZXIoYmVmb3JlVW5sb2FkRXZlbnQuZ2V0KCkpOworICAgICAgICBkb2N1bWVu
dC0+ZGVmYXVsdEV2ZW50SGFuZGxlcihiZWZvcmVVbmxvYWRFdmVudC5wdHIoKSk7CiAgICAgaWYg
KGJlZm9yZVVubG9hZEV2ZW50LT5yZXR1cm5WYWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKaW5kZXggOTg5MDk5NDBlMzQ0ZjNiMjg2YjIwY2I1MWFk
MTIwODA2ZjIyM2QyMy4uODhlN2VlMmIyNTMxZGZmNzE3NjFmMmM1ZTcwY2U0ODJlODhiYTRlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUhvc3QuY3BwCkBAIC0zNTAsNyArMzUwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6ZGlzcGF0Y2hET01FdmVudChFdmVudElEIGlkLCBpbnQgdG90YWwsIGludCBkb25lKQog
ICAgICAgICAgICAgZXZlbnQgPSBQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVl
LCBkb25lLCB0b3RhbCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV2ZW50ID0gRXZlbnQ6
OmNyZWF0ZShldmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG1fZG9tQXBwbGljYXRp
b25DYWNoZS0+ZGlzcGF0Y2hFdmVudChldmVudCwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAg
ICAgIG1fZG9tQXBwbGljYXRpb25DYWNoZS0+ZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDFlZmFlYjQxYTc4ZjJlY2E5ODg1
M2Y3NzIxZDllOGU1Zjk0NWU4NTkuLmY4OWUxOTQ2ODg5NGYzNTMwMmRkNTVjZjA0ZTMxYzBlNmMy
YTk2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIFJlZjxNZXNzYWdlRXZlbnQ+
IGV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzID0gTWVzc2FnZVBv
cnQ6OmVudGFuZ2xlUG9ydHMoKmNvbnRleHQsIFdURjo6bW92ZShtX2NoYW5uZWxzKSk7CiAgICAg
ICAgIHJldHVybiBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZVBvcnRzKSwg
bV9tZXNzYWdlLCBtX29yaWdpbiwgU3RyaW5nKCksIG1fc291cmNlKTsKQEAgLTkyOCw3ICs5Mjgs
NyBAQCB2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGlt
ZXImIHRpbWVyKQogICAgIGRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKHRpbWVy
LnRhcmdldE9yaWdpbigpLCB0aW1lci5ldmVudChkb2N1bWVudCgpKSwgdGltZXIuc3RhY2tUcmFj
ZSgpKTsKIH0KIAotdm9pZCBET01XaW5kb3c6OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdp
bkNoZWNrKFNlY3VyaXR5T3JpZ2luKiBpbnRlbmRlZFRhcmdldE9yaWdpbiwgUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlKQordm9p
ZCBET01XaW5kb3c6OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3VyaXR5
T3JpZ2luKiBpbnRlbmRlZFRhcmdldE9yaWdpbiwgRXZlbnQmIGV2ZW50LCBQYXNzUmVmUHRyPFNj
cmlwdENhbGxTdGFjaz4gc3RhY2tUcmFjZSkKIHsKICAgICBpZiAoaW50ZW5kZWRUYXJnZXRPcmln
aW4pIHsKICAgICAgICAgLy8gQ2hlY2sgdGFyZ2V0IG9yaWdpbiBub3cgc2luY2UgdGhlIHRhcmdl
dCBkb2N1bWVudCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSB0aW1lciB3YXMgc2NoZWR1bGVk
LgpAQCAtMTg3MCw3ICsxODcwLDcgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIKIAogdm9pZCBE
T01XaW5kb3c6OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGxvYWRF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkp
OworICAgIFJlZjxFdmVudD4gbG9hZEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
bG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmxv
YWRlcigpLmRvY3VtZW50TG9hZGVyKCkgJiYgIW1fZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9h
ZGVyKCktPnRpbWluZygpLmxvYWRFdmVudFN0YXJ0KCkpIHsKICAgICAgICAgLy8gVGhlIERvY3Vt
ZW50TG9hZGVyIChhbmQgdGh1cyBpdHMgRG9jdW1lbnRMb2FkVGltaW5nKSBtaWdodCBnZXQgZGVz
dHJveWVkIHdoaWxlIGRpc3BhdGNoaW5nCiAgICAgICAgIC8vIHRoZSBldmVudCwgc28gcHJvdGVj
dCBpdCB0byBwcmV2ZW50IHdyaXRpbmcgdGhlIGVuZCB0aW1lIGludG8gZnJlZWQgbWVtb3J5LgpA
QCAtMTg5MiwzNCArMTg5MiwzMyBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hMb2FkRXZlbnQo
KQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9hZEV2ZW50RmlyZWQoZnJhbWUoKSk7
CiB9CiAKLWJvb2wgRE9NV2luZG93OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBy
cEV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBUYXJnZXQpCitib29sIERPTVdpbmRv
dzo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAg
ICAgUmVmPEV2ZW50VGFyZ2V0PiBwcm90ZWN0KCp0aGlzKTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2
ZW50ID0gcHJwRXZlbnQ7CiAKICAgICAvLyBQYXVzaW5nIGEgcGFnZSBtYXkgdHJpZ2dlciBwYWdl
aGlkZSBhbmQgcGFnZXNob3cgZXZlbnRzLiBXZWJDb3JlIGFsc28gaW1wbGljaXRseSBmaXJlcyB0
aGVzZQogICAgIC8vIGV2ZW50cyB3aGVuIGNsb3NpbmcgYSBXZWJWaWV3LiBIZXJlIHdlIGtlZXAg
dHJhY2sgb2YgdGhlIHN0YXRlIG9mIHRoZSBwYWdlIHRvIHByZXZlbnQgZHVwbGljYXRlLAogICAg
IC8vIHVuYmFsYW5jZWQgZXZlbnRzIHBlciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcGFnZXNob3cg
ZXZlbnQ6CiAgICAgLy8gPGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvbXVsdGlwYWdlL2hpc3RvcnkuaHRtbCNldmVudC1wYWdlc2hvdz4uCi0gICAgaWYg
KGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFBhZ2VUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VU
eXBlKSB7Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wYWdlc2hv
d0V2ZW50KSB7CisgICAgaWYgKGV2ZW50LmV2ZW50SW50ZXJmYWNlKCkgPT0gUGFnZVRyYW5zaXRp
b25FdmVudEludGVyZmFjZVR5cGUpIHsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkucGFnZXNob3dFdmVudCkgewogICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0
dXMgPT0gUGFnZVN0YXR1c1Nob3duKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBF
dmVudCB3YXMgcHJldmlvdXNseSBkaXNwYXRjaGVkOyBkbyBub3QgZmlyZSBhIGR1cGxpY2F0ZSBl
dmVudC4KICAgICAgICAgICAgIG1fbGFzdFBhZ2VTdGF0dXMgPSBQYWdlU3RhdHVzU2hvd247Ci0g
ICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZWhpZGVF
dmVudCkgeworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
cGFnZWhpZGVFdmVudCkgewogICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFn
ZVN0YXR1c0hpZGRlbikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRXZlbnQgd2Fz
IHByZXZpb3VzbHkgZGlzcGF0Y2hlZDsgZG8gbm90IGZpcmUgYSBkdXBsaWNhdGUgZXZlbnQuCiAg
ICAgICAgICAgICBtX2xhc3RQYWdlU3RhdHVzID0gUGFnZVN0YXR1c0hpZGRlbjsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGV2ZW50LT5zZXRUYXJnZXQocHJwVGFyZ2V0ID8gcHJwVGFyZ2V0IDog
dGhpcyk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNl
dEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KHRhcmdl
dCA/IHRhcmdldCA6IHRoaXMpOworICAgIGV2ZW50LnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Cisg
ICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKIAotICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3coZnJhbWUoKSwgKmV2ZW50LCAqdGhpcyk7CisgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnRPbldpbmRvdyhmcmFtZSgpLCBldmVudCwgKnRoaXMp
OwogCi0gICAgYm9vbCByZXN1bHQgPSBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQuZ2V0KCkpOwor
ICAgIGJvb2wgcmVzdWx0ID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIAogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93KGNvb2tpZSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4IDBkOGQ5NTM1YWI3NDNkOTI5Njc1YTViYzQwYjE0
NDI4YjhjNTI3ZWQuLmI1MDAxYmNmMWI3MDZmZTcwZWI0OGY0YTc4NzFlNzI2YjJiYTFhNTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtMjQ0LDcgKzI0NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgLy8gTmVlZGVkIGZvciBPYmplY3RpdmUtQyBiaW5kaW5ncyAoc2VlIGJ1
ZyAyODc3NCkuCiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiwgY29uc3QgU3RyaW5nJiB0YXJnZXRP
cmlnaW4sIERPTVdpbmRvdyYgc291cmNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQg
cG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGltZXImKTsKLSAgICAgICAgdm9pZCBk
aXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhPcmlnaW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5k
ZWRUYXJnZXRPcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0Q2FsbFN0YWNrPik7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRo
T3JpZ2luQ2hlY2soU2VjdXJpdHlPcmlnaW4qIGludGVuZGVkVGFyZ2V0T3JpZ2luLCBFdmVudCYs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+KTsKIAogICAgICAgICB2b2lk
IHNjcm9sbEJ5KGludCB4LCBpbnQgeSkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2Nyb2xsVG8oaW50
IHgsIGludCB5KSBjb25zdDsKQEAgLTI3OCw3ICsyNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpIG92ZXJyaWRl
OwogCiAgICAgICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgICAgICBi
b29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQsIFBhc3NSZWZQdHI8
RXZlbnRUYXJnZXQ+IHBycFRhcmdldCk7CisgICAgICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVu
dCYsIEV2ZW50VGFyZ2V0Kik7CiAKICAgICAgICAgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcAppbmRleCA5MjU3NTRlYzQz
NjEwZTdhN2Y2OTliNjg0ODE1MmU3MmM4NWFmNjIxLi4zYzM4NDMwOTU2MzQ5NjIyYWUyZTE5ZmQ1
Yjc2MDM4NWM5NTkwNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5j
cHAKQEAgLTcxLDkgKzcxLDggQEAgdm9pZCBEZXZpY2VDb250cm9sbGVyOjpyZW1vdmVBbGxEZXZp
Y2VFdmVudExpc3RlbmVycyhET01XaW5kb3cqIHdpbmRvdykKICAgICAgICAgbV9jbGllbnQtPnN0
b3BVcGRhdGluZygpOwogfQogCi12b2lkIERldmljZUNvbnRyb2xsZXI6OmRpc3BhdGNoRGV2aWNl
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCit2b2lkIERldmljZUNvbnRyb2xsZXI6
OmRpc3BhdGNoRGV2aWNlRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxFdmVudD4g
ZXZlbnQgPSBwcnBFdmVudDsKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4+IGxpc3RlbmVy
VmVjdG9yOwogICAgIGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycywgbGlzdGVuZXJWZWN0b3IpOwog
ICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBsaXN0ZW5lclZlY3RvcikgewpAQCAtOTMsOCArOTIs
MTAgQEAgdm9pZCBEZXZpY2VDb250cm9sbGVyOjpmaXJlRGV2aWNlRXZlbnQoKQogICAgIG1fbGFz
dEV2ZW50TGlzdGVuZXJzLmNsZWFyKCk7CiAgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IGxpc3Rl
bmVyVmVjdG9yKSB7CiAgICAgICAgIGF1dG8gZG9jdW1lbnQgPSBsaXN0ZW5lci0+ZG9jdW1lbnQo
KTsKLSAgICAgICAgaWYgKGRvY3VtZW50ICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0Fy
ZVN1c3BlbmRlZCgpICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkK
LSAgICAgICAgICAgIGxpc3RlbmVyLT5kaXNwYXRjaEV2ZW50KGdldExhc3RFdmVudCgpKTsKKyAg
ICAgICAgaWYgKGRvY3VtZW50ICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3Bl
bmRlZCgpICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8gbGFzdEV2ZW50ID0gZ2V0TGFzdEV2ZW50KCkpCisgICAgICAgICAg
ICAgICAgbGlzdGVuZXItPmRpc3BhdGNoRXZlbnQoKmxhc3RFdmVudCk7CisgICAgICAgIH0KICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmgKaW5kZXggZmRmNWQx
ZDk2ZDE1Nzc2NzZjYTkwOWY5MTg5M2M1N2Y5ODA4YTVjZi4uMjE4NjFmMjRlNWU0MzhlNzAwMmQ3
OWYxMjNlNjhiY2I5YmEwODg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZp
Y2VDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVy
LmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVEZXZpY2VFdmVu
dExpc3RlbmVyKERPTVdpbmRvdyopOwogICAgIHZvaWQgcmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0
ZW5lcnMoRE9NV2luZG93Kik7CiAKLSAgICB2b2lkIGRpc3BhdGNoRGV2aWNlRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pOworICAgIHZvaWQgZGlzcGF0Y2hEZXZpY2VFdmVudChFdmVudCYpOwogICAg
IGJvb2wgaXNBY3RpdmUoKSB7IHJldHVybiAhbV9saXN0ZW5lcnMuaXNFbXB0eSgpOyB9CiAgICAg
RGV2aWNlQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgdmlydHVh
bCBib29sIGhhc0xhc3REYXRhKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFJl
ZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBmaXJlRGV2aWNlRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAKaW5kZXggMDUwYjYyODk1YWVhNzM2NDlkMmFlNDY0ZTU5ZmM2ODNmMWE2Yjlk
MC4uZGFhMGY5OGY5YzBhMjU2NmUxMDg5ZTUwZDlkZDU2MGI4ZWRmNzdkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBib29sIERyYWdD
b250cm9sbGVyOjpkaXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9yKEZyYW1lKiBpbm5lckZyYW1lLCBE
cmFnRGF0YSYgZHJhZwogICAgIEFTU0VSVChtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmhh
c0NhcmV0KCkpOwogICAgIFN0cmluZyB0ZXh0ID0gbV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIo
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpID8gZW1wdHlTdHJpbmcoKSA6IGRyYWdEYXRhLmFz
UGxhaW5UZXh0KCk7CiAgICAgTm9kZSogdGFyZ2V0ID0gaW5uZXJGcmFtZS0+ZWRpdG9yKCkuZmlu
ZEV2ZW50VGFyZ2V0RnJvbShtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmNhcmV0UG9zaXRp
b24oKSk7Ci0gICAgcmV0dXJuIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0
ZUZvckRyb3AoaW5uZXJGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHRleHQpLCBJR05P
UkVfRVhDRVBUSU9OKTsKKyAgICByZXR1cm4gdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVu
dDo6Y3JlYXRlRm9yRHJvcChpbm5lckZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4
dCkpOwogfQogCiBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRh
JiBkcmFnRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2NzBlMTM1
ZjNkMzRmZDMzNjZkMzg4YTZlOTAwNmM3NWMxZWQ0ZmEzLi5jNzFkOWEyM2E0YmEwYTA1MGQxNWJk
ODQ1MTI0NjI1N2Q2MDE2NTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBA
IC0zMDEyLDEzICszMDEyLDEzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkKICAgICBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQga2V5RG93bkV2ZW50ID0gaW5pdGlhbEtleUV2ZW50OyAgICAKICAgICBpZiAoa2V5
RG93bkV2ZW50LnR5cGUoKSAhPSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICBr
ZXlEb3duRXZlbnQuZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFBsYXRmb3JtRXZlbnQ6OlJhd0tl
eURvd24sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpOwotICAgIFJlZlB0cjxLZXlib2FyZEV2
ZW50PiBrZXlkb3duID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleURvd25FdmVudCwgbV9mcmFt
ZS5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpKTsKKyAgICBSZWY8S2V5Ym9hcmRFdmVudD4ga2V5
ZG93biA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShrZXlEb3duRXZlbnQsIG1fZnJhbWUuZG9jdW1l
bnQoKS0+ZGVmYXVsdFZpZXcoKSk7CiAgICAgaWYgKG1hdGNoZWRBbkFjY2Vzc0tleSkKICAgICAg
ICAga2V5ZG93bi0+c2V0RGVmYXVsdFByZXZlbnRlZCh0cnVlKTsKICAgICBrZXlkb3duLT5zZXRU
YXJnZXQoZWxlbWVudCk7CiAKICAgICBpZiAoaW5pdGlhbEtleUV2ZW50LnR5cGUoKSA9PSBQbGF0
Zm9ybUV2ZW50OjpSYXdLZXlEb3duKSB7Ci0gICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQo
a2V5ZG93biwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZl
bnQoa2V5ZG93bik7CiAgICAgICAgIC8vIElmIGZyYW1lIGNoYW5nZWQgYXMgYSByZXN1bHQgb2Yg
a2V5ZG93biBkaXNwYXRjaCwgdGhlbiByZXR1cm4gdHJ1ZSB0byBhdm9pZCBzZW5kaW5nIGEgc3Vi
c2VxdWVudCBrZXlwcmVzcyBtZXNzYWdlIHRvIHRoZSBuZXcgZnJhbWUuCiAgICAgICAgIGJvb2wg
Y2hhbmdlZEZvY3VzZWRGcmFtZSA9IG1fZnJhbWUucGFnZSgpICYmICZtX2ZyYW1lICE9ICZtX2Zy
YW1lLnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAg
ICAgIHJldHVybiBrZXlkb3duLT5kZWZhdWx0SGFuZGxlZCgpIHx8IGtleWRvd24tPmRlZmF1bHRQ
cmV2ZW50ZWQoKSB8fCBjaGFuZ2VkRm9jdXNlZEZyYW1lOwpAQCAtMzAyOSw3ICszMDI5LDcgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYg
aW5pdGlhbEtleUV2ZW50KQogICAgIC8vIGluIG9yZGVyIHRvIG1hdGNoIElFOgogICAgIC8vIDEu
IHByZXZlbnRpbmcgZGVmYXVsdCBoYW5kbGluZyBvZiBrZXlkb3duIGFuZCBrZXlwcmVzcyBldmVu
dHMgaGFzIG5vIGVmZmVjdCBvbiBJTSBpbnB1dDsKICAgICAvLyAyLiBpZiBhbiBpbnB1dCBtZXRo
b2QgaGFuZGxlcyB0aGUgZXZlbnQsIGl0cyBrZXlDb2RlIGlzIHNldCB0byAyMjkgaW4ga2V5ZG93
biBldmVudC4KLSAgICBtX2ZyYW1lLmVkaXRvcigpLmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihr
ZXlkb3duLmdldCgpKTsKKyAgICBtX2ZyYW1lLmVkaXRvcigpLmhhbmRsZUlucHV0TWV0aG9kS2V5
ZG93bihrZXlkb3duLnB0cigpKTsKICAgICAKICAgICBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9k
ID0ga2V5ZG93bi0+ZGVmYXVsdEhhbmRsZWQoKTsKICAgICAKQEAgLTMwNDAsMTAgKzMwNDAsMTAg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCYgaW5pdGlhbEtleUV2ZW50KQogICAgICAgICBrZXlkb3duLT5zZXREZWZhdWx0SGFuZGxlZCgp
OwogICAgIH0KICAgICAKLSAgICBpZiAoYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dh
dGlvbihrZXlkb3duLmdldCgpKSkKKyAgICBpZiAoYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQ
cm9wb2dhdGlvbihrZXlkb3duKSkKICAgICAgICAga2V5ZG93bi0+c3RvcFByb3BhZ2F0aW9uKCk7
CiAKLSAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGtleWRvd24sIElHTk9SRV9FWENFUFRJT04p
OworICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93bik7CiAgICAgLy8gSWYgZnJhbWUg
Y2hhbmdlZCBhcyBhIHJlc3VsdCBvZiBrZXlkb3duIGRpc3BhdGNoLCB0aGVuIHJldHVybiBlYXJs
eSB0byBhdm9pZCBzZW5kaW5nIGEgc3Vic2VxdWVudCBrZXlwcmVzcyBtZXNzYWdlIHRvIHRoZSBu
ZXcgZnJhbWUuCiAgICAgYm9vbCBjaGFuZ2VkRm9jdXNlZEZyYW1lID0gbV9mcmFtZS5wYWdlKCkg
JiYgJm1fZnJhbWUgIT0gJm1fZnJhbWUucGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2Vk
T3JNYWluRnJhbWUoKTsKICAgICBib29sIGtleWRvd25SZXN1bHQgPSBrZXlkb3duLT5kZWZhdWx0
SGFuZGxlZCgpIHx8IGtleWRvd24tPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBjaGFuZ2VkRm9jdXNl
ZEZyYW1lOwpAQCAtMzA2MiwxNCArMzA2MiwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6a2V5RXZl
bnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbml0aWFsS2V5RXZlbnQpCiAgICAga2V5
UHJlc3NFdmVudC5kaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1FdmVudDo6Q2hhciwg
YmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSk7CiAgICAgaWYgKGtleVByZXNzRXZlbnQudGV4dCgp
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGtleWRvd25SZXN1bHQ7Ci0gICAgUmVmUHRyPEtl
eWJvYXJkRXZlbnQ+IGtleXByZXNzID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleVByZXNzRXZl
bnQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7CisgICAgUmVmPEtleWJvYXJk
RXZlbnQ+IGtleXByZXNzID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleVByZXNzRXZlbnQsIG1f
ZnJhbWUuZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7CiAgICAga2V5cHJlc3MtPnNldFRhcmdl
dChlbGVtZW50KTsKICAgICBpZiAoa2V5ZG93blJlc3VsdCkKICAgICAgICAga2V5cHJlc3MtPnNl
dERlZmF1bHRQcmV2ZW50ZWQodHJ1ZSk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAga2V5cHJl
c3MtPmtleXByZXNzQ29tbWFuZHMoKSA9IGtleWRvd24tPmtleXByZXNzQ29tbWFuZHMoKTsKICNl
bmRpZgotICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5cHJlc3MsIElHTk9SRV9FWENFUFRJ
T04pOworICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5cHJlc3MpOwogCiAgICAgcmV0dXJu
IGtleWRvd25SZXN1bHQgfHwga2V5cHJlc3MtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBrZXlwcmVz
cy0+ZGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAgLTMxODYsNyArMzE4Niw3IEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjpoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50Rm9yQWNjZXNzaWJpbGl0eShL
ZXlib2FyZEV2ZW50CiAgICAgfQogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6YWNjZXNzaWJpbGl0
eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50KiBldmVudCkKK2Jvb2wgRXZl
bnRIYW5kbGVyOjphY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKEtleWJvYXJk
RXZlbnQmIGV2ZW50KQogewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQoKSkKQEAgLTMx
OTYsOSArMzE5Niw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjphY2Nlc3NpYmlsaXR5UHJldmVudHNF
dmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBDaGVjayBmb3Iga2V5IGV2ZW50cyB0aGF0IGFyZSByZWxldmFudCB0byBh
Y2Nlc3NpYmlsaXR5OiB0YWIgYW5kIGFycm93cyBrZXlzIHRoYXQgY2hhbmdlIGZvY3VzCi0gICAg
aWYgKGV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwOSIpCisgICAgaWYgKGV2ZW50Lmtl
eUlkZW50aWZpZXIoKSA9PSAiVSswMDA5IikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gZm9jdXNEaXJlY3Rpb25Gb3JLZXkoZXZlbnQtPmtleUlk
ZW50aWZpZXIoKSk7CisgICAgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gZm9jdXNEaXJlY3Rp
b25Gb3JLZXkoZXZlbnQua2V5SWRlbnRpZmllcigpKTsKICAgICBpZiAoZGlyZWN0aW9uICE9IEZv
Y3VzRGlyZWN0aW9uTm9uZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQpAQCAtMzQ5NCwx
MCArMzQ5NCwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4dElucHV0RXZlbnQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdW5kZXJseWluZ0V2ZQogICAgIGlmIChGcmFtZVZpZXcq
IHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKICAgICAgICAgdmlldy0+ZGlzYWJsZUxheWVyRmx1c2hU
aHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigpOwogCi0gICAgUmVmUHRyPFRleHRF
dmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdp
bmRvdygpLCB0ZXh0LCBpbnB1dFR5cGUpOworICAgIFJlZjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4
dEV2ZW50OjpjcmVhdGUobV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgaW5w
dXRUeXBlKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdFdmVudCk7
CiAKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT5kZWZh
dWx0SGFuZGxlZCgpOwogfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXgg
M2Q1NzU4ODRhOWJhODYwN2E3OWE3ZmQ0N2M3NmQxNzQzMjNiOTM4Ny4uMjQzNWRhMDE1MTE4M2Fl
NmQzZmFhOTlkZTQ5NzY3MTU3M2E5M2M5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CkBAIC0yNDcsNyArMjQ3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wga2V5
RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50Jik7CiAgICAgdm9pZCBkZWZhdWx0S2V5
Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCopOwogCi0gICAgYm9vbCBhY2Nlc3NpYmls
aXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQqKTsKKyAgICBib29sIGFj
Y2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVudCYpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFuZGxlS2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudEZvckFj
Y2Vzc2liaWxpdHkoS2V5Ym9hcmRFdmVudCopOwogCiAgICAgYm9vbCBoYW5kbGVUZXh0SW5wdXRF
dmVudChjb25zdCBTdHJpbmcmIHRleHQsIEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQgPSBudWxscHRy
LCBUZXh0RXZlbnRJbnB1dFR5cGUgPSBUZXh0RXZlbnRJbnB1dEtleWJvYXJkKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudFNvdXJjZS5jcHAKaW5kZXggOWY5MGIwMWIxNTg1NDA4ZjY2MGQ3YjFkMDBlYzk2
ZmM4MTJmYWRiNy4uNGExMDE1MTJkNjg2NjM4ODYwMGVkNzMyZmMzY2E4NDE2ZjdhNDBiYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKQEAgLTQxMCwxMSArNDEwLDExIEBAIGJvb2wg
RXZlbnRTb3VyY2U6OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IEV2ZW50U291cmNlOjpjcmVhdGVN
ZXNzYWdlRXZlbnQoKQorUmVmPE1lc3NhZ2VFdmVudD4gRXZlbnRTb3VyY2U6OmNyZWF0ZU1lc3Nh
Z2VFdmVudCgpCiB7Ci0gICAgUmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZlbnQgPSBNZXNzYWdlRXZl
bnQ6OmNyZWF0ZSgpOworICAgIFJlZjxNZXNzYWdlRXZlbnQ+IGV2ZW50ID0gTWVzc2FnZUV2ZW50
OjpjcmVhdGUoKTsKICAgICBldmVudC0+aW5pdE1lc3NhZ2VFdmVudChtX2V2ZW50TmFtZS5pc0Vt
cHR5KCkgPyBldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50IDogQXRvbWljU3RyaW5nKG1fZXZlbnRO
YW1lKSwgZmFsc2UsIGZhbHNlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShTdHJpbmc6
OmFkb3B0KG1fZGF0YSkpLCBtX2V2ZW50U3RyZWFtT3JpZ2luLCBtX2xhc3RFdmVudElkLCAwLCAw
KTsKLSAgICByZXR1cm4gZXZlbnQucmVsZWFzZSgpOworICAgIHJldHVybiBldmVudDsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCmluZGV4IGU0
OWQ2OGUyMzdmYjk5ZTYxMGU2ZDZjN2UzNmFjOWQzYTRjMjhjNmMuLjFkMjU0NThlZTNkMGJmYWRi
MTIzYjAxYmY2ZjlmZWRlMDI0M2RlNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKQEAg
LTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFib3J0Q29ubmVjdGlvbkF0dGVtcHQo
KTsKICAgICB2b2lkIHBhcnNlRXZlbnRTdHJlYW0oKTsKICAgICB2b2lkIHBhcnNlRXZlbnRTdHJl
YW1MaW5lKHVuc2lnbmVkIHBvcywgaW50IGZpZWxkTGVuZ3RoLCBpbnQgbGluZUxlbmd0aCk7Ci0g
ICAgUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZU1lc3NhZ2VFdmVudCgpOworICAgIFJl
ZjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZU1lc3NhZ2VFdmVudCgpOwogCiAgICAgVVJMIG1fdXJsOwog
ICAgIGJvb2wgbV93aXRoQ3JlZGVudGlhbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5k
ZXggMWU3ZmVkNzAxN2FhMmI5ZDIwMWNhZDAwMTcxYzkwNjg1YzUzZGM4NC4uMzFhYzMxZTAyZWEy
MjU5ZjhlMjg2N2RhN2NmNzVkZTdmMTQzZDhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cApAQCAtMzE4NCwxNCArMzE4NCwxNCBAQCB2b2lkIEZyYW1lVmlldzo6c2VuZFJlc2l6ZUV2ZW50
SWZOZWVkZWQoKQogICAgIGJvb2wgaXNNYWluRnJhbWUgPSBmcmFtZSgpLmlzTWFpbkZyYW1lKCk7
CiAgICAgYm9vbCBjYW5TZW5kUmVzaXplRXZlbnRTeW5jaHJvbm91c2x5ID0gaXNNYWluRnJhbWUg
JiYgIW1fc2hvdWxkQXV0b1NpemU7CiAKLSAgICBSZWZQdHI8RXZlbnQ+IHJlc2l6ZUV2ZW50ID0g
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVzaXplRXZlbnQsIGZhbHNlLCBmYWxzZSk7Cisg
ICAgUmVmPEV2ZW50PiByZXNpemVFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJl
c2l6ZUV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChjYW5TZW5kUmVzaXplRXZlbnRTeW5j
aHJvbm91c2x5KQotICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZl
bnQocmVzaXplRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5k
aXNwYXRjaFdpbmRvd0V2ZW50KHJlc2l6ZUV2ZW50KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8g
RklYTUU6IFF1ZXVlaW5nIHRoaXMgZXZlbnQgZm9yIGFuIHVucHJlZGljdGFibGUgdGltZSBpbiB0
aGUgZnV0dXJlIHNlZW1zCiAgICAgICAgIC8vIGludHJpbnNpY2FsbHkgcmFjeS4gQnkgdGhlIHRp
bWUgdGhpcyByZXNpemUgZXZlbnQgZmlyZXMsIHRoZSBmcmFtZSBtaWdodAogICAgICAgICAvLyBi
ZSByZXNpemVkIGFnYWluLCBzbyB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0d28gcmVzaXplIGV2ZW50
cyBmb3IgdGhlIHNhbWUgc2l6ZS4KLSAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1ZXVl
V2luZG93RXZlbnQocmVzaXplRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUoKS5kb2N1
bWVudCgpLT5lbnF1ZXVlV2luZG93RXZlbnQoV1RGOjptb3ZlKHJlc2l6ZUV2ZW50KSk7CiAgICAg
fQogCiAgICAgaWYgKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkgJiYg
aXNNYWluRnJhbWUpIHsKQEAgLTMzNzcsMTEgKzMzNzcsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnVw
ZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2Fs
T3ZlcmYKICAgICAgICAgbV9ob3Jpem9udGFsT3ZlcmZsb3cgPSBob3Jpem9udGFsT3ZlcmZsb3c7
CiAgICAgICAgIG1fdmVydGljYWxPdmVyZmxvdyA9IHZlcnRpY2FsT3ZlcmZsb3c7CiAKLSAgICAg
ICAgUmVmUHRyPE92ZXJmbG93RXZlbnQ+IG92ZXJmbG93RXZlbnQgPSBPdmVyZmxvd0V2ZW50Ojpj
cmVhdGUoaG9yaXpvbnRhbE92ZXJmbG93Q2hhbmdlZCwgaG9yaXpvbnRhbE92ZXJmbG93LAorICAg
ICAgICBSZWY8T3ZlcmZsb3dFdmVudD4gb3ZlcmZsb3dFdmVudCA9IE92ZXJmbG93RXZlbnQ6OmNy
ZWF0ZShob3Jpem9udGFsT3ZlcmZsb3dDaGFuZ2VkLCBob3Jpem9udGFsT3ZlcmZsb3csCiAgICAg
ICAgICAgICB2ZXJ0aWNhbE92ZXJmbG93Q2hhbmdlZCwgdmVydGljYWxPdmVyZmxvdyk7CiAgICAg
ICAgIG92ZXJmbG93RXZlbnQtPnNldFRhcmdldCh2aWV3cG9ydFJlbmRlcmVyLT5lbGVtZW50KCkp
OwogCi0gICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+ZW5xdWV1ZU92ZXJmbG93RXZlbnQob3Zl
cmZsb3dFdmVudC5yZWxlYXNlKCkpOworICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmVucXVl
dWVPdmVyZmxvd0V2ZW50KFdURjo6bW92ZShvdmVyZmxvd0V2ZW50KSk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA5M2M3MDZjMDcwNDVi
YjZiYjllNTRjODk1YzY1ZDAzNjk2MWY1ZGQ2Li5jNjFjYzhiNjdkMzJlYjNmMjQ2Y2JmNWYxMGNh
OWM5NzZmZjhkNzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
QEAgLTE2OSw5ICsxNjksOSBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghaG9yaXpvbnRhbExheW91
dE92ZXJmbG93Q2hhbmdlZCAmJiAhdmVydGljYWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUmVmUHRyPE92ZXJmbG93RXZlbnQ+IG92ZXJmbG93
RXZlbnQgPSBPdmVyZmxvd0V2ZW50OjpjcmVhdGUoaG9yaXpvbnRhbExheW91dE92ZXJmbG93Q2hh
bmdlZCwgaGFzSG9yaXpvbnRhbExheW91dE92ZXJmbG93LCB2ZXJ0aWNhbExheW91dE92ZXJmbG93
Q2hhbmdlZCwgaGFzVmVydGljYWxMYXlvdXRPdmVyZmxvdyk7CisgICAgICAgIFJlZjxPdmVyZmxv
d0V2ZW50PiBvdmVyZmxvd0V2ZW50ID0gT3ZlcmZsb3dFdmVudDo6Y3JlYXRlKGhvcml6b250YWxM
YXlvdXRPdmVyZmxvd0NoYW5nZWQsIGhhc0hvcml6b250YWxMYXlvdXRPdmVyZmxvdywgdmVydGlj
YWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQsIGhhc1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3cpOwogICAg
ICAgICBvdmVyZmxvd0V2ZW50LT5zZXRUYXJnZXQobV9ibG9jay0+ZWxlbWVudCgpKTsKLSAgICAg
ICAgbV9ibG9jay0+ZG9jdW1lbnQoKS5lbnF1ZXVlT3ZlcmZsb3dFdmVudChvdmVyZmxvd0V2ZW50
LnJlbGVhc2UoKSk7CisgICAgICAgIG1fYmxvY2stPmRvY3VtZW50KCkuZW5xdWV1ZU92ZXJmbG93
RXZlbnQoV1RGOjptb3ZlKG92ZXJmbG93RXZlbnQpKTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcAppbmRleCAwNzIxMDc2OWZk
MDZiYTljZTg3YWM0NjUyYzk5ZTJjMTc4ZDI4NGYxLi43ZWI1OGEyNmE0OGZmNzBlZmY5ZTVmNTUz
ZDU2ZTQwOGZiMWYyMmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckV2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRR
dWV1ZS5jcHAKQEAgLTQ5LDggKzQ5LDggQEAgV29ya2VyRXZlbnRRdWV1ZTo6fldvcmtlckV2ZW50
UXVldWUoKQogY2xhc3MgV29ya2VyRXZlbnRRdWV1ZTo6RXZlbnREaXNwYXRjaGVyCiB7CiBwdWJs
aWM6Ci0gICAgRXZlbnREaXNwYXRjaGVyKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBXb3JrZXJF
dmVudFF1ZXVlJiBldmVudFF1ZXVlKQotICAgICAgICA6IG1fZXZlbnQoZXZlbnQpCisgICAgRXZl
bnREaXNwYXRjaGVyKFJlZlB0cjxFdmVudD4mJiBldmVudCwgV29ya2VyRXZlbnRRdWV1ZSYgZXZl
bnRRdWV1ZSkKKyAgICAgICAgOiBtX2V2ZW50KFdURjo6bW92ZShldmVudCkpCiAgICAgICAgICwg
bV9ldmVudFF1ZXVlKGV2ZW50UXVldWUpCiAgICAgICAgICwgbV9pc0NhbmNlbGxlZChmYWxzZSkK
ICAgICB7CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1faXNDYW5jZWxs
ZWQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZXZlbnRRdWV1ZS5tX2V2ZW50RGlz
cGF0Y2hlck1hcC5yZW1vdmUobV9ldmVudC5nZXQoKSk7Ci0gICAgICAgIG1fZXZlbnQtPnRhcmdl
dCgpLT5kaXNwYXRjaEV2ZW50KG1fZXZlbnQpOworICAgICAgICBtX2V2ZW50LT50YXJnZXQoKS0+
ZGlzcGF0Y2hFdmVudCgqbV9ldmVudCk7CiAgICAgICAgIG1fZXZlbnQgPSBudWxscHRyOwogICAg
IH0KIApAQCAtODMsMTMgKzgzLDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ2FuY2VsbGVk
OwogfTsKIAotYm9vbCBXb3JrZXJFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQpCitib29sIFdvcmtlckV2ZW50UXVldWU6OmVucXVldWVFdmVudChSZWY8RXZl
bnQ+JiYgZXZlbnQpCiB7CiAgICAgaWYgKG1faXNDbG9zZWQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEV2ZW50RGlzcGF0Y2hlciogZXZlbnREaXNwYXRjaGVyUHRyID0gbmV3IEV2ZW50
RGlzcGF0Y2hlcihldmVudC5nZXQoKSwgKnRoaXMpOwotICAgIG1fZXZlbnREaXNwYXRjaGVyTWFw
LmFkZChldmVudCwgZXZlbnREaXNwYXRjaGVyUHRyKTsKKyAgICBFdmVudERpc3BhdGNoZXIqIGV2
ZW50RGlzcGF0Y2hlclB0ciA9IG5ldyBFdmVudERpc3BhdGNoZXIoZXZlbnQuY29weVJlZigpLCAq
dGhpcyk7CisgICAgbV9ldmVudERpc3BhdGNoZXJNYXAuYWRkKGV2ZW50LnB0cigpLCBldmVudERp
c3BhdGNoZXJQdHIpOwogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5wb3N0VGFzayhbZXZl
bnREaXNwYXRjaGVyUHRyXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEV2ZW50RGlzcGF0Y2hlcj4gZXZlbnREaXNwYXRjaGVyKGV2ZW50RGlzcGF0
Y2hlclB0cik7CiAgICAgICAgIGV2ZW50RGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5oIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKaW5kZXggOWEwNTc1NjgxMTkyOTIzMGI0
YmVlNTc4MGRlYzg0MTlkNTVhMjQ3ZS4uM2RiZjMzZGIzOGI3Yzc5MzMxOGRiYmYxZTQ4NDk0ZjA0
MjZlY2I3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1
ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKQEAg
LTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFdvcmtlckV2ZW50UXVldWUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYpOwogICAgIHZpcnR1YWwgfldvcmtlckV2ZW50UXVldWUoKTsK
IAotICAgIHZpcnR1YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuY2VsRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKaW5kZXgg
YWIxNzA4ZmU0NDI1ZDAxZjY1MTU4MzkzMzU0N2Q5YzljN2RiNmUxZC4uYzNlMTUzOGI0MjZjZTM1
NjU4YzA4YjMxMmQ4ZmM5MTkwNTk5MGE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCkBAIC04MSwy
NSArODEsMjQgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlz
cGF0Y2hUaHJvdHRsZWRQcm9ncmVzc0V2ZW50KGJvb2wgbGUKICAgICBtX2hhc1Rocm90dGxlZFBy
b2dyZXNzRXZlbnQgPSB0cnVlOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlOjpkaXNwYXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVudChSZWZQdHI8RXZlbnQ+JiYg
ZXZlbnQsIFByb2dyZXNzRXZlbnRBY3Rpb24gcHJvZ3Jlc3NFdmVudEFjdGlvbikKK3ZvaWQgWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5n
ZUV2ZW50KEV2ZW50JiBldmVudCwgUHJvZ3Jlc3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2ZW50QWN0
aW9uKQogewogICAgIGlmIChwcm9ncmVzc0V2ZW50QWN0aW9uID09IEZsdXNoUHJvZ3Jlc3NFdmVu
dCkKICAgICAgICAgZmx1c2hQcm9ncmVzc0V2ZW50KCk7CiAKLSAgICBkaXNwYXRjaEV2ZW50KFdU
Rjo6bW92ZShldmVudCkpOworICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCi12b2lkIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaEV2ZW50KFJlZlB0cjxF
dmVudD4mJiBldmVudCkKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6
OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChldmVudCk7CiAgICAg
aWYgKG1fZGVmZXJFdmVudHMpIHsKLSAgICAgICAgaWYgKG1fZGVmZXJyZWRFdmVudHMuc2l6ZSgp
ID4gMSAmJiBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5yZWFkeXN0YXRlY2hhbmdlRXZl
bnQgJiYgZXZlbnQtPnR5cGUoKSA9PSBtX2RlZmVycmVkRXZlbnRzLmxhc3QoKS0+dHlwZSgpKSB7
CisgICAgICAgIGlmIChtX2RlZmVycmVkRXZlbnRzLnNpemUoKSA+IDEgJiYgZXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5yZWFkeXN0YXRlY2hhbmdlRXZlbnQgJiYgZXZlbnQudHlwZSgpID09
IG1fZGVmZXJyZWRFdmVudHMubGFzdCgpLT50eXBlKCkpIHsKICAgICAgICAgICAgIC8vIFJlYWR5
c3RhdGVjaGFuZ2UgZXZlbnRzIGFyZSBzdGF0ZS1sZXNzIHNvIGF2b2lkIHJlcGVhdGluZyB0d28g
aWRlbnRpY2FsIGV2ZW50cyBpbiBhIHJvdyBvbiByZXN1bWUuCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2
ZW50KSk7CisgICAgICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKICAgICB9IGVs
c2UKLSAgICAgICAgbV90YXJnZXQtPmRpc3BhdGNoRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7Cisg
ICAgICAgIG1fdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSkKQEAgLTEyMCw4ICsxMTksNyBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmbHVzaFByb2dyZXNzRXZlbnQoKQogewogICAgIGlm
IChtX2RlZmVyRXZlbnRzICYmIG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50KSB7CiAgICAgICAgIC8v
IE1vdmUgdGhlIHByb2dyZXNzIGV2ZW50IHRvIHRoZSBxdWV1ZSwgdG8gZ2V0IGl0IGluIHRoZSBy
aWdodCBvcmRlciBvbiByZXN1bWUuCi0gICAgICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKG1f
ZGVmZXJyZWRQcm9ncmVzc0V2ZW50KTsKLSAgICAgICAgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQg
PSBudWxscHRyOworICAgICAgICBtX2RlZmVycmVkRXZlbnRzLmFwcGVuZChtX2RlZmVycmVkUHJv
Z3Jlc3NFdmVudC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMTQ0LDE2ICsxNDIsMTUgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJv
dHRsZTo6ZGlzcGF0Y2hEZWZlcnJlZEV2ZW50cygpCiAgICAgLy8gVGFrZSBvdmVyIHRoZSBkZWZl
cnJlZCBldmVudHMgYmVmb3JlIGRpc3BhdGNoaW5nIHRoZW0gd2hpY2ggY2FuIHBvdGVudGlhbGx5
IGFkZCBtb3JlLgogICAgIGF1dG8gZGVmZXJyZWRFdmVudHMgPSBXVEY6Om1vdmUobV9kZWZlcnJl
ZEV2ZW50cyk7CiAKLSAgICBSZWZQdHI8RXZlbnQ+IGRlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IG1f
ZGVmZXJyZWRQcm9ncmVzc0V2ZW50OwotICAgIG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50ID0gbnVs
bHB0cjsKKyAgICBSZWZQdHI8RXZlbnQ+IGRlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IFdURjo6bW92
ZShtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCk7CiAKICAgICBmb3IgKGF1dG8mIGRlZmVycmVkRXZl
bnQgOiBkZWZlcnJlZEV2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hFdmVudChkZWZlcnJlZEV2ZW50
LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZGVmZXJyZWRFdmVudCk7CiAKICAg
ICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgd2lsbCBiZSBpbiB0aGUgbV9kZWZlcnJlZEV2ZW50cyB2
ZWN0b3IgaWYgdGhlIGxvYWQgd2FzIGZpbmlzaGVkIHdoaWxlIHN1c3BlbmRlZC4KICAgICAvLyBJ
ZiBub3QsIGp1c3Qgc2VuZCB0aGUgbW9zdCB1cC10by1kYXRlIHByb2dyZXNzIG9uIHJlc3VtZS4K
ICAgICBpZiAoZGVmZXJyZWRQcm9ncmVzc0V2ZW50KQotICAgICAgICBkaXNwYXRjaEV2ZW50KFdU
Rjo6bW92ZShkZWZlcnJlZFByb2dyZXNzRXZlbnQpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgq
ZGVmZXJyZWRQcm9ncmVzc0V2ZW50KTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZTo6ZmlyZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaAppbmRleCAyOWY0ZDY1NWQ4M2Qx
NmY2MTcwZmQ1NTg3NTZkNWE3NjE5NTA0ZjAyLi5jMTAwOWU1MGRiOTA4Y2E0MzNjZTQ1ZGY1M2Zl
NTA3NGVmYTc3NjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUoKTsKIAog
ICAgIHZvaWQgZGlzcGF0Y2hUaHJvdHRsZWRQcm9ncmVzc0V2ZW50KGJvb2wgbGVuZ3RoQ29tcHV0
YWJsZSwgdW5zaWduZWQgbG9uZyBsb25nIGxvYWRlZCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFs
KTsKLSAgICB2b2lkIGRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KFJlZlB0cjxFdmVudD4m
JiwgUHJvZ3Jlc3NFdmVudEFjdGlvbiA9IERvTm90Rmx1c2hQcm9ncmVzc0V2ZW50KTsKKyAgICB2
b2lkIGRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KEV2ZW50JiwgUHJvZ3Jlc3NFdmVudEFj
dGlvbiA9IERvTm90Rmx1c2hQcm9ncmVzc0V2ZW50KTsKICAgICB2b2lkIGRpc3BhdGNoUHJvZ3Jl
c3NFdmVudChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIHZvaWQgc3VzcGVuZCgpOwpAQCAt
NjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpOwogICAgIHZv
aWQgZGlzcGF0Y2hEZWZlcnJlZEV2ZW50cygpOwogICAgIHZvaWQgZmx1c2hQcm9ncmVzc0V2ZW50
KCk7Ci0gICAgdm9pZCBkaXNwYXRjaEV2ZW50KFJlZlB0cjxFdmVudD4mJik7CisgICAgdm9pZCBk
aXNwYXRjaEV2ZW50KEV2ZW50Jik7CiAKICAgICBib29sIGhhc0V2ZW50VG9EaXNwYXRjaCgpIGNv
bnN0OwogCkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZGVmZXJFdmVu
dHM7CiAgICAgUmVmUHRyPEV2ZW50PiBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudDsKLSAgICBWZWN0
b3I8UmVmUHRyPEV2ZW50Pj4gbV9kZWZlcnJlZEV2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50
Pj4gbV9kZWZlcnJlZEV2ZW50czsKICAgICBUaW1lciBtX2Rpc3BhdGNoRGVmZXJyZWRFdmVudHNU
aW1lcjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265328</attachid>
            <date>2015-11-11 16:16:30 -0800</date>
            <delta_ts>2015-11-11 19:54:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151158-20151111161624.patch</filename>
            <type>text/plain</type>
            <size>117959</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTI1YWNjZjRkMzZlOTdh
NzFiZDc1ZDM1OWJmNTE3MTllZTA0Y2JlOC4uMGJmMzVmYjhlODMwMTcyYWM3NTEyM2UyY2FkNTQz
M2I2YzNjMzBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFz
c1JlZlB0ciB0byBkaXNwYXRjaEV2ZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFN0b3AgcGFzc2luZyBhIFBhc3NSZWZQdHIgdG8gZGlzcGF0Y2hF
dmVudCgpIGJlY2F1c2U6CisgICAgICAgIDEuIFBhc3NSZWZQdHIgaXMgbGVnYWN5IGFuZCBzaG91
bGQgbm8gbG9uZ2VyIGJlIHVzZWQKKyAgICAgICAgMi4gV2UgZG9uJ3QgYWN0dWFsbHkgdHJhbnNm
ZXIgb3duZXJzaGlwIG9mIHRoZSBFdmVudCB0byB0aGUgY2FsbGVlCisKKyAgICAgICAgUGFzcyBh
IEMrKyByZWZlcmVuY2UgaW5zdGVhZC4KKwogMjAxNS0xMS0xMCAgSm9uIEhvbmV5Y3V0dCAgPGpo
b25leWN1dHRAYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGxvYWRpbmcgQmxpbmsgbGF5b3V0
IHRlc3QgZmFzdC9wYXJzZXIvc3RyaXAtc2NyaXB0LWF0dHJzLW9uLWlucHV0Lmh0bWwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIuY3Bw
CmluZGV4IGNmODJhMzU1MjljZTMwODA3ZDE2OTA2OWU1ZDdhZmNiOGE0MWJkOWUuLjI1MjE1Yzk3
MDQ2Y2U5ZmUyYmZhYjFlMGI0ZDAxZDE0YWIxMzViOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNwcApAQCAtODQsNyArODQs
NyBAQCB2b2lkIEJhdHRlcnlDb250cm9sbGVyOjp1cGRhdGVCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQ
dHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YQogCiB2b2lkIEJhdHRlcnlDb250cm9sbGVyOjpk
aWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNz
UmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMpCiB7Ci0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpOworICAgIFJl
ZjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsK
ICAgICBSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeSA9IGJhdHRlcnlTdGF0dXM7CiAgICAg
Zm9yIChhdXRvJiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzKQogICAgICAgICBsaXN0ZW5lci0+ZGlk
Q2hhbmdlQmF0dGVyeVN0YXR1cyhldmVudCwgYmF0dGVyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcAppbmRleCAzYzFlYTc3NDU2ZjRk
MmE5Njc3N2U0OWRjNjUwMTE0YTI4NjY1ZjYyLi5kNmQxODBlODU1NjBhY2QzZjdjNzljYjU1Nzc0
YTgwNDEwNzljMmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9C
YXR0ZXJ5TWFuYWdlci5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgZG91YmxlIEJhdHRlcnlNYW5hZ2Vy
OjpsZXZlbCgpCiAgICAgcmV0dXJuIG1fYmF0dGVyeVN0YXR1cyA/IG1fYmF0dGVyeVN0YXR1cy0+
bGV2ZWwoKSA6IDE7CiB9CiAKLXZvaWQgQmF0dGVyeU1hbmFnZXI6OmRpZENoYW5nZUJhdHRlcnlT
dGF0dXMoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4g
YmF0dGVyeVN0YXR1cykKK3ZvaWQgQmF0dGVyeU1hbmFnZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0
dXMoRXZlbnQmIGV2ZW50LCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMp
CiB7CiAgICAgdXBkYXRlQmF0dGVyeVN0YXR1cyhiYXR0ZXJ5U3RhdHVzKTsKICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVy
eS9CYXR0ZXJ5TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRl
cnlNYW5hZ2VyLmgKaW5kZXggNzlhMDFmOTM2OWIwNjM5ODhmNmJjMjdjNjk2OGM3NTU0ZThjZGRh
Zi4uZDRlM2QyNjE1ZTI2MTIwODQ3MDVhZDYyYjUxY2I1MzJhMDhjMjkwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmgKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSBkaXNjaGFyZ2luZ1RpbWUoKTsKICAgICBkb3VibGUg
bGV2ZWwoKTsKIAotICAgIHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEV2
ZW50PiwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CisgICAgdm9pZCBkaWRDaGFuZ2VCYXR0
ZXJ5U3RhdHVzKEV2ZW50JiwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPik7CiAgICAgdm9pZCB1
cGRhdGVCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOwogICAgIHZvaWQg
YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95ZWQoKSB7IG1fYmF0dGVyeUNvbnRyb2xsZXIgPSBudWxs
cHRyOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkV2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IGI4OGVkZTU4ZDgxZTQwNmM4MDJlNTNlOGE0MTg3
NDliZDEzMzdhOTkuLmY4MWYzNjU4MmQ3ZGJmZjUyNWU4Y2U4N2I5ZjA1NzM4MjcxYjQ4MWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0
Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnRE
aXNwYXRjaGVyLmNwcApAQCAtMzYsMzAgKzM2LDMwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50KiBldmVudCwgVmVjdG9y
PFJlZlB0cjxFdmVudFRhcmdldD4+JiBldmVudFRhcmdldHMpCitib29sIElEQkV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2goRXZlbnQmIGV2ZW50LCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4m
IGV2ZW50VGFyZ2V0cykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IGV2ZW50VGFyZ2V0cy5zaXplKCk7
CiAgICAgQVNTRVJUKHNpemUpOwogCi0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNB
UFRVUklOR19QSEFTRSk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5H
X1BIQVNFKTsKICAgICBmb3IgKHNpemVfdCBpID0gc2l6ZSAtIDE7IGk7IC0taSkgeyAvLyBEb24n
dCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQo
ZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChl
dmVudFRhcmdldHNbaV0uZ2V0KCkpOwogICAgICAgICBldmVudFRhcmdldHNbaV0tPmZpcmVFdmVu
dExpc3RlbmVycyhldmVudCk7Ci0gICAgICAgIGlmIChldmVudC0+cHJvcGFnYXRpb25TdG9wcGVk
KCkpCisgICAgICAgIGlmIChldmVudC5wcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgICAg
IGdvdG8gZG9uZURpc3BhdGNoaW5nOwogICAgIH0KIAotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNl
KEV2ZW50OjpBVF9UQVJHRVQpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFy
Z2V0c1swXS5nZXQoKSk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VU
KTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1swXS5nZXQoKSk7CiAg
ICAgZXZlbnRUYXJnZXRzWzBdLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwotICAgIGlmIChl
dmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgIWV2ZW50LT5idWJibGVzKCkgfHwgZXZlbnQt
PmNhbmNlbEJ1YmJsZSgpKQorICAgIGlmIChldmVudC5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAh
ZXZlbnQuYnViYmxlcygpIHx8IGV2ZW50LmNhbmNlbEJ1YmJsZSgpKQogICAgICAgICBnb3RvIGRv
bmVEaXNwYXRjaGluZzsKIAotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElO
R19QSEFTRSk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0Up
OwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7IC8vIERvbid0IGRvIHRo
ZSBmaXJzdCBlbGVtZW50LgotICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChldmVudFRh
cmdldHNbaV0uZ2V0KCkpOworICAgICAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFy
Z2V0c1tpXS5nZXQoKSk7CiAgICAgICAgIGV2ZW50VGFyZ2V0c1tpXS0+ZmlyZUV2ZW50TGlzdGVu
ZXJzKGV2ZW50KTsKLSAgICAgICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCBl
dmVudC0+Y2FuY2VsQnViYmxlKCkpCisgICAgICAgIGlmIChldmVudC5wcm9wYWdhdGlvblN0b3Bw
ZWQoKSB8fCBldmVudC5jYW5jZWxCdWJibGUoKSkKICAgICAgICAgICAgIGdvdG8gZG9uZURpc3Bh
dGNoaW5nOwogICAgIH0KIApAQCAtODIsOSArODIsOSBAQCBib29sIElEQkV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2goRXZlbnQqIGV2ZW50LCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4mIGV2
ZQogICAgIC8vICAgICAgICBldmVudCBvbiB0aGUgd2luZG93IHVudGlsIHRoYXQgaGFzIGJlZW4g
aW1wbGVtZW50ZWQpLiIgLS0gSm9uYXMgU2lja2luZwogCiBkb25lRGlzcGF0Y2hpbmc6Ci0gICAg
ZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQobnVsbHB0cik7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoMCk7Ci0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIGV2ZW50
LnNldEN1cnJlbnRUYXJnZXQobnVsbHB0cik7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsK
KyAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuaAppbmRleCBhNDYzOTNlZDg2YzRhNjFlNTY5NjQ1Yzk2YzkxYzU1
MDgyNjRlZmZmLi5lZDU5NTk3NWFjYjY1YWQ2NzJmNTI4OTlhZDAyZjNhZjNmMzM1MDA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNo
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3Bh
dGNoZXIuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBFdmVudFRhcmdldDsKIAogY2xhc3MgSURC
RXZlbnREaXNwYXRjaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaChFdmVu
dCosIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFu
ZCB0aGVuIGl0cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgor
ICAgIHN0YXRpYyBib29sIGRpc3BhdGNoKEV2ZW50JiwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdl
dD4+Jik7IC8vIFRoZSB0YXJnZXQgZmlyc3QgYW5kIHRoZW4gaXRzIGFuY2VzdG9ycyBpbiBvcmRl
ciBvZiBob3cgdGhlIGV2ZW50IGJ1YmJsZXMuCiAKIHByaXZhdGU6CiAgICAgSURCRXZlbnREaXNw
YXRjaGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCmluZGV4IGRiZTAwMGY1NzE0YWUyODhmMDYz
NDgyM2VjNjM1ZmYxODQ0YzgxYjMuLjYxYjE3N2M4OTg4ZmQ3NjNmZWQ4MjI0MThkMTMwZjY5OTU0
Mjc5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJEYXRhYmFzZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwCkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBJ
REJEYXRhYmFzZTo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudCh1aW50NjRfdCByZXF1ZXN0ZWRWZXJz
aW9uKQogICAgIAogICAgIFJlZjxFdmVudD4gZXZlbnQgPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6
OmNyZWF0ZShjdXJyZW50VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbiwgZXZlbnROYW1lcygpLnZl
cnNpb25jaGFuZ2VFdmVudCk7CiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoYWRvcHRSZWYo
JmV2ZW50LmxlYWtSZWYoKSkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRR
dWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZTo6ZGlkQ3JlYXRlSW5kZXhJbmZvKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVx
dWVzdEltcGwuY3BwCmluZGV4IDc1Yjk2NWQ5MGQwMTllMGY1NjhjNDNjN2ZkOGY5NWMxMWM5ZWVl
ZWMuLjk4YWVhZDVlOWQxNWZhMTZmYWE2N2FmOGIxMzI2MWZhY2UyZjlmYzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVl
c3RJbXBsLmNwcApAQCAtMTk0LDE2ICsxOTQsMTQgQEAgdm9pZCBJREJSZXF1ZXN0OjplbnF1ZXVl
RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBldmVudC0+
c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpLmVucXVldWVFdmVudCgmZXZlbnQuZ2V0KCkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAot
Ym9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50
KQorYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCAtICVzIiwgcHJwRXZlbnQt
PnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6
ZGlzcGF0Y2hFdmVudCAtICVzIiwgZXZlbnQudHlwZSgpLmNoYXJhY3RlcnM4KCkpOwogCi0gICAg
UmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkg
IT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpICE9IGV2
ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCiAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVl
c3RSZWFkeVN0YXRlOjpEb25lOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRh
cmdldHM7CkBAIC0yMTcsNyArMjE1LDcgQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgIGJvb2wgZG9udFByZXZlbnREZWZhdWx0
OwogICAgIHsKICAgICAgICAgVHJhbnNhY3Rpb25BY3RpdmF0b3IgYWN0aXZhdG9yKG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOwotICAgICAgICBkb250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKyAgICAgICAgZG9udFByZXZl
bnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudCwgdGFyZ2V0cyk7
CiAgICAgfQogCiAgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSBmYWxzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBs
LmgKaW5kZXggYTQyYjE3YjQ0M2M0MWM4M2NhOGVmOWQ2ZWQ0MDIzMzhmNDI2OTJjOC4uMjkwZTM5
YzViZDNjOTZjNjE4YzU5OGZmODQwODQwMDUzZmMwM2Y0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmgKQEAg
LTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD46
OmRlcmVmOwogCiAgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGUgZmluYWw7
CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZSBmaW5hbDsK
IAogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29u
bmVjdGlvbjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCmluZGV4IDBkYzFjNGY1OGU0
NjIyOWVjMTdiNTE1YjAxYjMxZDYyYmU0NmMwNjAuLjRhNDcxOTRjMzQ5OTkzOTBhN2M5N2JhZjQy
M2JlNGU3YTlkMTBmZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC0zNDYsNyAr
MzQ2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZmlyZU9uQWJvcnQoKQogICAgIGVucXVldWVF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxzZSkp
OwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiBldmVu
dCkKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQp
CiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpG
aW5pc2hlZCk7CiAKQEAgLTM1NCwyMiArMzU0LDIyIEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmVu
cXVldWVFdmVudChSZWY8RXZlbnQ+IGV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBldmVu
dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRR
dWV1ZSgpLmVucXVldWVFdmVudCgmZXZlbnQuZ2V0KCkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKIH0K
IAotYm9vbCBJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK2Jvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQog
ewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOwog
CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50
LT50YXJnZXQoKSA9PSB0aGlzKTsKLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50KTsKKyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJU
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFdmVu
dFRhcmdldD4+IHRhcmdldHM7CiAgICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7CiAgICAgdGFyZ2V0
cy5hcHBlbmQoZGIoKSk7CiAKLSAgICByZXR1cm4gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aChldmVudC5nZXQoKSwgdGFyZ2V0cyk7CisgICAgcmV0dXJuIElEQkV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogfQogCiBSZWY8SURCT2JqZWN0U3RvcmU+IElEQlRy
YW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGlu
Zm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCVHJhbnNhY3Rpb25JbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKaW5kZXggYjNkN2IzY2MzNjZkNThhYTdhNDRhMThk
MzJhNzc2OWRiNmU3ZDUxYy4uMDQzNjE5NTkwYzI2NzE0MWEwNzczNWQ1YzFkN2IxOTEwMjc2OTM3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QlRyYW5zYWN0aW9uSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyByZWYoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyBk
ZXJlZigpOyB9CiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmly
dHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlIGZpbmFs
OworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGUgZmluYWw7
CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBv
dmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgp
IGNvbnN0IG92ZXJyaWRlIGZpbmFsOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGZpcmVPbkNvbXBsZXRlKCk7CiAgICAgdm9pZCBmaXJlT25BYm9ydCgpOwotICAgIHZv
aWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxF
dmVudD4mJik7CiAKICAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEluZGV4UmVjb3JkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBl
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5jcHAKaW5kZXggYjAx
NGU2NjIxZDIwZDExM2MxYzcxNGMzMWE3MWQ5NmY4MzFmODQyZC4uZDAzZjEyOGNkMzExZWQyMjli
ZGMzNGM3YzAxZTVjZTBlMTFiNjdjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3BwCkBAIC05Miw3ICs5
Miw3IEBAIExlZ2FjeURhdGFiYXNlOjp+TGVnYWN5RGF0YWJhc2UoKQogICAgICAgICAvLyBjb25u
ZWN0aW9uIGNhbGxlZCBzZXRWZXJzaW9uLCBidXQgdGhlIGZyb250ZW5kIGNvbm5lY3Rpb24gaXMg
YmVpbmcKICAgICAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCiAgICAgICAg
IGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKQotICAgICAgICAgICAgY29udGV4
dC0+ZXZlbnRRdWV1ZSgpLmNhbmNlbEV2ZW50KCpldmVudCk7CisgICAgICAgICAgICBjb250ZXh0
LT5ldmVudFF1ZXVlKCkuY2FuY2VsRXZlbnQoZXZlbnQpOwogICAgIH0KIH0KIApAQCAtMzIxLDcg
KzMyMSw3IEBAIHZvaWQgTGVnYWN5RGF0YWJhc2U6OmNsb3NlQ29ubmVjdGlvbigpCiAgICAgLy8g
Y29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9udGVuZCBjb25uZWN0aW9u
IGlzIGJlaW5nCiAgICAgLy8gY2xvc2VkIGJlZm9yZSB0aGV5IGNvdWxkIGZpcmUuCiAgICAgZm9y
IChhdXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKLSAgICAgICAgYm9vbCByZW1vdmVk
ID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOworICAgICAgICBib29sIHJlbW92ZWQg
PSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZW1vdmVkLCByZW1vdmVkKTsKICAgICB9CiAKQEAgLTM0MSwyNSArMzQxLDI1IEBAIHZvaWQgTGVn
YWN5RGF0YWJhc2U6Om9uVmVyc2lvbkNoYW5nZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRf
dCBuZXdWZXJzaW9uKQogICAgIGVucXVldWVFdmVudChMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQ6
OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5n
ZUV2ZW50KSk7CiB9CiAKLXZvaWQgTGVnYWN5RGF0YWJhc2U6OmVucXVldWVFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgTGVnYWN5RGF0YWJhc2U6OmVucXVldWVFdmVudChSZWY8
RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKICAgICBB
U1NFUlQoIW1faXNDbG9zZWQpOwogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmdldCgpKTsKLSAgICBtX2VucXVl
dWVkRXZlbnRzLmFwcGVuZChldmVudCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5l
dmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmNvcHlSZWYoKSk7CisgICAgbV9lbnF1ZXVl
ZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgTGVnYWN5RGF0YWJh
c2U6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeURh
dGFiYXNlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coU3RvcmFnZUFQ
SSwgIkxlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNTRVJUKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7CisgICAgQVNTRVJUKGV2
ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50KTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0KCkpCisgICAgICAg
IGlmIChtX2VucXVldWVkRXZlbnRzW2ldLnB0cigpID09ICZldmVudCkKICAgICAgICAgICAgIG1f
ZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwogICAgIH0KLSAgICByZXR1cm4gRXZlbnRUYXJnZXQ6
OmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIHJldHVybiBFdmVudFRhcmdldDo6ZGlz
cGF0Y2hFdmVudChldmVudCk7CiB9CiAKIGludDY0X3QgTGVnYWN5RGF0YWJhc2U6OmZpbmRPYmpl
Y3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKaW5kZXgg
MTEzN2U1ZTMwMDI0NDE4MWUyMThlNDlmM2Q1N2JiN2NkNThlNjc3ZC4uZWExZWI1ZjIzZGEwZjU2
NmQ5NjMzNjhhNjhiYzMxYWY0NGZkYjI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKQEAgLTg0LDEwICs4
NCwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Nsb3NlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fY2xvc2VQZW5kaW5nOyB9CiAgICAgdm9pZCBmb3JjZUNsb3NlKCk7CiAgICAgY29uc3QgSURC
RGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0K
LSAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBlbnF1
ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJy
aWRlOwogCiAgICAgaW50NjRfdCBmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0CkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIEtlZXAgdHJhY2sg
b2YgdGhlIHZlcnNpb25jaGFuZ2UgZXZlbnRzIHdhaXRpbmcgdG8gYmUgZmlyZWQgb24gdGhpcwog
ICAgIC8vIGRhdGFiYXNlIHNvIHRoYXQgd2UgY2FuIGNhbmNlbCB0aGVtIGlmIHRoZSBkYXRhYmFz
ZSBjbG9zZXMuCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7Cisg
ICAgVmVjdG9yPFJlZjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7CiAKICAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVl
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9w
ZW5EQlJlcXVlc3QuY3BwCmluZGV4IDMyOTBjNTBmMDQyZTkwZWYyZWFiYTcyNzU4MGU3MjM5MzQ4
MjY1NmQuLjcyMTdiYzNlNGRhNzJiYzZiNGM3NmVlZDk1YWY3NzE1YzQ2MWFkNmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJS
ZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKQEAgLTEzOCwxMSArMTM4LDExIEBAIGJvb2wgTGVnYWN5
T3BlbkRCUmVxdWVzdDo6c2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3QKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KEV2ZW50JiBldmVudCkKIHsKICAgICAvLyBJZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgYmV0d2Vl
biBvblVwZ3JhZGVOZWVkZWQgYW5kIHRoZSBkZWxpdmVyeSBvZiB0aGUgInN1Y2Nlc3MiIGV2ZW50
LAogICAgIC8vIGFuICJlcnJvciIgZXZlbnQgc2hvdWxkIGJlIGZpcmVkIGluc3RlYWQuCi0gICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCAmJiBtX3Jlc3Vs
dC0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCRGF0YWJhc2UgJiYgbV9yZXN1bHQtPmxlZ2Fj
eURhdGFiYXNlKCktPmlzQ2xvc2VQZW5kaW5nKCkpIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgJiYgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6
OlR5cGU6OklEQkRhdGFiYXNlICYmIG1fcmVzdWx0LT5sZWdhY3lEYXRhYmFzZSgpLT5pc0Nsb3Nl
UGVuZGluZygpKSB7CiAgICAgICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgb25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJy
b3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeU9wZW5EQlJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmgKaW5kZXggNWE1OTNiNWY2ZWFjNzBkYjdkMzAyYjA2
ZTg5Y2ViZTM4NDhkZTQ1Zi4uNjRmNjZjNDBiMDc4MzM1NjcxYTNhYjhkYjhiOWRlN2JkY2FjYmFh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeU9wZW5EQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoK
IAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwg
Ym9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZSBmaW5hbDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJyaWRlIGZpbmFsOwogCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEVucXVldWVFdmVudCgpIGNvbnN0IG92
ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCmluZGV4IGEzYzIwMjBiMDAwYjczNGVkNmNhN2EzM2Vl
Mzk2ZWQ4OGE4ZWU1MWMuLjJjNzQ3YTU2YWFhZDUzY2Y3ZDRkM2EzZGQwODRmOGQ1ZjMyYTlhZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdh
Y3lSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5UmVxdWVzdC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIExlZ2FjeVJlcXVl
c3Q6OmFib3J0KCkKIAogICAgIEV2ZW50UXVldWUmIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKTsKICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1
ZXVlZEV2ZW50cykgewotICAgICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2
ZW50KCpldmVudCk7CisgICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZl
bnQoZXZlbnQpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogICAg
IH0KICAgICBtX2VucXVldWVkRXZlbnRzLmNsZWFyKCk7CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9p
ZCBMZWdhY3lSZXF1ZXN0OjpvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IpCiAgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZl
bnQsIHRydWUsIHRydWUpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZVN1
Y2Nlc3NFdmVudCgpCitzdGF0aWMgUmVmPEV2ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQogewog
ICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNl
LCBmYWxzZSk7CiB9CkBAIC00NjYsNyArNDY2LDcgQEAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgTGVn
YWN5UmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAogICAgIHJldHVybiBJREJS
ZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwogfQogCi1ib29sIExlZ2FjeVJlcXVlc3Q6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeVJlcXVl
c3Q6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIExPRyhTdG9yYWdlQVBJLCAi
TGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCIpOwogICAgIEFTU0VSVChtX3JlYWR5U3RhdGUg
PT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRpbmcpOwpAQCAtNDc0LDE2ICs0NzQsMTYgQEAg
Ym9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQogICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CiAgICAgQVNTRVJUKG1fZW5xdWV1
ZWRFdmVudHMuc2l6ZSgpKTsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
LSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpID09IHRoaXMpOwotICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UobV9yZWFkeVN0YXRlIDwgSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUsICJXaGVuIGRp
c3BhdGNoaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgPCBET05FKCVkKSwgd2FzICVkIiwgZXZl
bnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KElEQlJl
cXVlc3RSZWFkeVN0YXRlOjpEb25lKSwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWR5U3RhdGUpKTsK
KyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX3JlYWR5U3RhdGUgPCBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSwgIldoZW4gZGlz
cGF0Y2hpbmcgZXZlbnQgJXMsIG1fcmVhZHlTdGF0ZSA8IERPTkUoJWQpLCB3YXMgJWQiLCBldmVu
dC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihJREJSZXF1
ZXN0UmVhZHlTdGF0ZTo6RG9uZSksIHN0YXRpY19jYXN0PGludD4obV9yZWFkeVN0YXRlKSk7CiAK
ICAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsKIAotICAg
IGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgaWYg
KGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQogICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
bV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVudC5nZXQoKSkKKyAgICAgICAgaWYgKG1f
ZW5xdWV1ZWRFdmVudHNbaV0ucHRyKCkgPT0gJmV2ZW50KQogICAgICAgICAgICAgbV9lbnF1ZXVl
ZEV2ZW50cy5yZW1vdmUoaSk7CiAgICAgfQogCkBAIC01MDAsNyArNTAwLDcgQEAgYm9vbCBMZWdh
Y3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAg
Ly8gQ3Vyc29yIHByb3BlcnRpZXMgc2hvdWxkIG5vdCB1cGRhdGVkIHVudGlsIHRoZSBzdWNjZXNz
IGV2ZW50IGlzIGJlaW5nIGRpc3BhdGNoZWQuCiAgICAgUmVmUHRyPExlZ2FjeUN1cnNvcj4gY3Vy
c29yVG9Ob3RpZnk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NF
dmVudCkgewogICAgICAgICBjdXJzb3JUb05vdGlmeSA9IGdldFJlc3VsdEN1cnNvcigpOwogICAg
ICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpIHsKICAgICAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5z
ZXRWYWx1ZVJlYWR5KHJlcXVlc3RTdGF0ZSgpLCBtX2N1cnNvcktleS5yZWxlYXNlKCksIG1fY3Vy
c29yUHJpbWFyeUtleS5yZWxlYXNlKCksIG1fY3Vyc29yVmFsdWUpOwpAQCAtNTA4LDE5ICs1MDgs
MTkgQEAgYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
IGV2ZW50KQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkgeworICAgIGlmIChldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkgewogICAgICAgICBBU1NFUlQoIW1fZGlk
RmlyZVVwZ3JhZGVOZWVkZWRFdmVudCk7CiAgICAgICAgIG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRF
dmVudCA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFdoZW4gd2UgYWxsb3cgY3VzdG9t
IGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBjaGFuZ2UuCi0g
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgfHwgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50LCAiZXZlbnQgdHlwZSB3YXMgJXMi
LCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGNvbnN0IGJvb2wg
c2V0VHJhbnNhY3Rpb25BY3RpdmUgPSBtX3RyYW5zYWN0aW9uICYmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkudXBncmFkZW5lZWRlZEV2ZW50IHx8IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50ICYmIG1fZXJyb3JDb2RlICE9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVy
cm9yKSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShldmVudC50eXBlKCkgPT0gZXZlbnROYW1l
cygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZl
bnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgfHwgZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQsICJldmVudCB0eXBlIHdh
cyAlcyIsIGV2ZW50LnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBjb25zdCBi
b29sIHNldFRyYW5zYWN0aW9uQWN0aXZlID0gbV90cmFuc2FjdGlvbiAmJiAoZXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQgfHwgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
ZXJyb3JFdmVudCAmJiBtX2Vycm9yQ29kZSAhPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRF
cnJvcikpOwogCiAgICAgaWYgKHNldFRyYW5zYWN0aW9uQWN0aXZlKQogICAgICAgICBtX3RyYW5z
YWN0aW9uLT5zZXRBY3RpdmUodHJ1ZSk7CiAKLSAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdCA9
IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAg
IGJvb2wgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChl
dmVudCwgdGFyZ2V0cyk7CiAKICAgICBpZiAobV90cmFuc2FjdGlvbikgewogICAgICAgICBpZiAo
bV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKQpAQCAtNTI4LDcgKzUy
OCw3IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKIAogICAgICAgICAvLyBQb3NzaWJseSBhYm9ydCB0aGUgdHJhbnNhY3Rpb24uIFRo
aXMgbXVzdCBvY2N1ciBhZnRlciB1bnJlZ2lzdGVyaW5nIChzbyB0aGlzIHJlcXVlc3QKICAgICAg
ICAgLy8gZG9lc24ndCByZWNlaXZlIGEgc2Vjb25kIGVycm9yKSBhbmQgYmVmb3JlIGRlYWN0aXZh
dGluZyAod2hpY2ggbWlnaHQgdHJpZ2dlciBjb21taXQpLgotICAgICAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBkb250UHJldmVudERlZmF1bHQgJiYg
IW1fcmVxdWVzdEFib3J0ZWQpIHsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuZXJyb3JFdmVudCAmJiBkb250UHJldmVudERlZmF1bHQgJiYgIW1fcmVxdWVzdEFib3J0
ZWQpIHsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEVycm9yKG1fZXJyb3IsIG1fZXJy
b3JNZXNzYWdlKTsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KElHTk9SRV9FWENF
UFRJT04pOwogICAgICAgICB9CkBAIC01NDEsNyArNTQxLDcgQEAgYm9vbCBMZWdhY3lSZXF1ZXN0
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIGlmIChjdXJzb3JU
b05vdGlmeSkKICAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnBvc3RTdWNjZXNzSGFuZGxlckNhbGxi
YWNrKCk7CiAKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpE
b25lICYmICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JGaW5pc2hlZCkgJiYgZXZlbnQtPnR5
cGUoKSAhPSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KQorICAgIGlmIChtX3JlYWR5
U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUgJiYgKCFjdXJzb3JUb05vdGlmeSB8
fCBtX2N1cnNvckZpbmlzaGVkKSAmJiBldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLnVwZ3Jh
ZGVuZWVkZWRFdmVudCkKICAgICAgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSBmYWxzZTsKIAog
ICAgIHJldHVybiBkb250UHJldmVudERlZmF1bHQ7CkBAIC01NjUsNyArNTY1LDcgQEAgdm9pZCBM
ZWdhY3lSZXF1ZXN0Ojp0cmFuc2FjdGlvbkRpZEZpbmlzaEFuZERpc3BhdGNoKCkKICAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZzsKIH0KIAotdm9pZCBMZWdh
Y3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIExl
Z2FjeVJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZyB8fCBtX3Jl
YWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpOwogCkBAIC01NzYsOCArNTc2
LDggQEAgdm9pZCBMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCiAKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwogCi0gICAgaWYgKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5nZXQoKSkp
Ci0gICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKKyAgICBpZiAoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KGV2ZW50LmNvcHlS
ZWYoKSkpCisgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaAppbmRleCA1YWVmYjEx
ZDIyODJjNzc4MWZhNmY5ZDY4NjdlNjg4NTZmNTc5ODMxLi5lYjFmYmFlZjJhZTYyNjVlMzIxN2Ji
YWNlNWYxYzA3ZTVmZDFiY2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmgKQEAgLTkyLDcgKzkyLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkg
b3ZlcnJpZGUgZmluYWw7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsK
LSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgdHJhbnNhY3Rpb25EaWRGaW5pc2hBbmREaXNwYXRjaCgpOwogCkBAIC0xMDgsNyAr
MTA4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgTGVnYWN5UmVxdWVzdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IHNvdXJjZSwgSURCRGF0YWJh
c2VCYWNrZW5kOjpUYXNrVHlwZSwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKLSAgICB2b2lkIGVucXVl
dWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2
ZW50PiYmKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3Q7CiAg
ICAgdm9pZCBvblN1Y2Nlc3NJbnRlcm5hbChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4pOwogICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUgbV90YXNrVHlwZTsKIAogICAgIGJvb2wgbV9oYXNQZW5kaW5n
QWN0aXZpdHk7Ci0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7Cisg
ICAgVmVjdG9yPFJlZjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7CiAKICAgICAvLyBPbmx5IHVz
ZWQgaWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJzb3IuCiAgICAgSW5kZXhlZERCOjpD
dXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uY3BwCmluZGV4IGYw
YjM0YTBkZTgyNjU4ODhjMGE0ZDM4YTYxYWVlMTlkYjY0Y2I3YjEuLmNlODQ5ZmQzZjc2NGE0NWZl
ODAxY2FkZTIxMDZkZWQwMTVlM2I0ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNwcApAQCAt
MzA2LDEzICszMDYsMTMgQEAgYm9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2
aXR5KCkgY29uc3QKICAgICByZXR1cm4gbV9oYXNQZW5kaW5nQWN0aXZpdHkgJiYgIW1fY29udGV4
dFN0b3BwZWQ7CiB9CiAKLWJvb2wgTGVnYWN5VHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2
ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVRyYW5zYWN0
aW9uOjpkaXNwYXRjaEV2ZW50Iik7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gRmluaXNoZWQpOwog
ICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsKKyAg
ICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7CiAgICAgbV9zdGF0ZSA9IEZpbmlzaGVk
OwogCiAgICAgLy8gQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KQEAgLTMyOCw4ICszMjgsOCBAQCBi
b29sIExlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQogICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOwogCiAgICAgLy8gRklYTUU6IFdoZW4gd2Ug
YWxsb3cgY3VzdG9tIGV2ZW50IGRpc3BhdGNoaW5nLCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0
byBjaGFuZ2UuCi0gICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBs
ZXRlRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7Ci0g
ICAgYm9vbCByZXR1cm5WYWx1ZSA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQu
Z2V0KCksIHRhcmdldHMpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50
KTsKKyAgICBib29sIHJldHVyblZhbHVlID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChl
dmVudCwgdGFyZ2V0cyk7CiAgICAgLy8gRklYTUU6IFRyeSB0byBjb25zdHJ1Y3QgYSB0ZXN0IHdo
ZXJlIHx0aGlzfCBvdXRsaXZlcyBvcGVuREJSZXF1ZXN0IGFuZCB3ZQogICAgIC8vIGdldCBhIGNy
YXNoLgogICAgIGlmIChtX29wZW5EQlJlcXVlc3QpIHsKQEAgLTM1OSwxNCArMzU5LDE0IEBAIGNv
bnN0IGNoYXIqIExlZ2FjeVRyYW5zYWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QK
ICAgICByZXR1cm4gIkxlZ2FjeVRyYW5zYWN0aW9uIjsKIH0KIAotdm9pZCBMZWdhY3lUcmFuc2Fj
dGlvbjo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBMZWdhY3lU
cmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fc3RhdGUgIT0gRmluaXNoZWQsICJBIGZpbmlzaGVkIHRyYW5zYWN0
aW9uIHRyaWVkIHRvIGVucXVldWUgYW4gZXZlbnQgb2YgdHlwZSAlcy4iLCBldmVudC0+dHlwZSgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGV2ZW50LT5z
ZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVl
KCkuZW5xdWV1ZUV2ZW50KGV2ZW50KTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2
ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKIElEQkRhdGFi
YXNlQmFja2VuZCogTGVnYWN5VHJhbnNhY3Rpb246OmJhY2tlbmREQigpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNh
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lU
cmFuc2FjdGlvbi5oCmluZGV4IDgzYjc5NzExNWU3OWI3ZWYxYmNjYzVhYTQwMzcwZTIzNzVhZTk0
MjIuLmY3OWRlYzMzMzk1ZGEyYTViZDY2MzNhNjIzYzgzYTNmOTcwNzU1NGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lU
cmFuc2FjdGlvbi5oCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZSBmaW5hbCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsgfQogCiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVh
bCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlIGZpbmFsOwor
ICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGUgZmluYWw7CiAK
ICAgICAvLyBBY3RpdmVET01PYmplY3QKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2
aXR5KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBMZWdhY3lUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
aW50NjRfdCwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZSwgTGVnYWN5RGF0YWJhc2UqLCBMZWdhY3lPcGVuREJSZXF1ZXN0KiwgY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSYpOwogCi0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4p
OworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAgICAgdm9pZCBjbG9zZU9w
ZW5DdXJzb3JzKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihMZWdhY3lDdXJzb3Iq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bS5jcHAKaW5kZXggYzNjYzM4MWE4OGEwMmE4ODI3MWZkYjdkNDI1NTFhMDNlZGM1MTc4Yi4uZDVm
YmRiZmIwZjYzYjk0ZmI4YTUyNjk0MWFhMzM4OTkxZDE0NWZkMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAKQEAgLTMwMyw3ICsz
MDMsNyBAQCB2b2lkIE1lZGlhU3RyZWFtOjphY3Rpdml0eUV2ZW50VGltZXJGaXJlZCgpCiAgICAg
ZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRBY3Rpdml0eUV2ZW50cyk7CiAKICAgICBmb3IgKGF1dG8m
IGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7
CisgICAgICAgIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIAogICAgIGV2ZW50cy5jbGVhcigpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1G
U2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNl
bmRlci5jcHAKaW5kZXggNTI3YjVkMTlkOTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4YmNkNWQ5OS4u
OWExNWNiYjAzZDIxNWI2MDk4YzcyMWU0OGZkNjYwY2M4OWU2ODNmZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC0x
NjIsNyArMTYyLDcgQEAgdm9pZCBSVENEVE1GU2VuZGVyOjpzY2hlZHVsZWRFdmVudFRpbWVyRmly
ZWQoKQogICAgIGV2ZW50cy5zd2FwKG1fc2NoZWR1bGVkRXZlbnRzKTsKIAogICAgIGZvciAoYXV0
byYgZXZlbnQgOiBldmVudHMpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgp
KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q0RhdGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
RGF0YUNoYW5uZWwuY3BwCmluZGV4IGQ3NzA4Y2EwNWJlYWQxNDE2NzdmYzg0NWE5YzMzNzZlNjQ0
ZmQzMTQuLmI2N2E2ZDkxNGQyNzk5MGU3YTMzMDA5NGEwZGUzN2MzZGQ1Zjc4YWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
Y3BwCkBAIC0zMjEsNyArMzIxLDcgQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c2NoZWR1bGVkRXZl
bnRUaW1lckZpcmVkKCkKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEV2ZW50cyk7CiAKICAg
ICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50
LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCBkZDQ2NDFlMWI4ZGEzMmRhNzE0
ZjM0NjgxMzM5NjdjNTgxYTQzZTY1Li5mZjVhYWU0NDY0NWYzNGE5NTVkZjE0M2IxOWY3YmE1ZGVl
ZmYzMzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtNzQyLDcgKzc0Miw3IEBAIHZvaWQgUlRDUGVl
ckNvbm5lY3Rpb246OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCgpCiAgICAgZXZlbnRzLnN3YXAo
bV9zY2hlZHVsZWRFdmVudHMpOwogCiAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykKLSAg
ICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRjaEV2
ZW50KCpldmVudCk7CiAKICAgICBldmVudHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5tbQppbmRleCBlNDUzMmM4YTE1ZmQ1NjI5ZDJhMTg1ODhmOTdiMTU0YTIwOGYwZGJjLi42Yzgz
ZWRjZWE1MDhlMzNiNmY2NDc2M2E3ODllYTc1MzJhNDE0ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50Lm1tCkBAIC0yNDMsOCArMjQzLDggQEAgdW5zaWduZWQgbG9uZyBsb25nIFF1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50Ojptb3ZpZVNpemUoKSBjb25zdAogdm9pZCBRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudDo6cG9zdEV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQogewogICAgIFJl
ZjxIVE1MUGx1Z0luRWxlbWVudD4gcHJvdGVjdCgqbV9wYXJlbnRFbGVtZW50KTsKLSAgICBSZWZQ
dHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVlKTsK
LSAgICBtX3BhcmVudEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOworICAgIFJl
ZjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIHRydWUpOwor
ICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKICNpZiBQTEFU
Rk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9E
ZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJv
eGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwCmluZGV4IDYwNzhmMzdmYjhkM2I5
MWU0ZWE3NmI0MGYzYjI0MGNiMDJkZTEzZmIuLjY4ZWEyOTZhZjgzYTUxYzNkZTYxOGM5OTZlZDQx
MTY0NmIxOGM5NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5
L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwCkBAIC01Nyw3ICs1Nyw3
IEBAIGJvb2wgRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6aGFzTGFzdERhdGEoKQogICAgIHJl
dHVybiBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+aGFzTGFzdERhdGEoKTsKIH0KIAotUGFzc1Jl
ZlB0cjxFdmVudD4gRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKK1Jl
ZlB0cjxFdmVudD4gRGV2aWNlUHJveGltaXR5Q29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKIHsK
ICAgICByZXR1cm4gRGV2aWNlUHJveGltaXR5RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Vi
a2l0ZGV2aWNlcHJveGltaXR5RXZlbnQsIGRldmljZVByb3hpbWl0eUNsaWVudCgpLT52YWx1ZSgp
LCBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+bWluKCksIGRldmljZVByb3hpbWl0eUNsaWVudCgp
LT5tYXgoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0
eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3By
b3hpbWl0eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmgKaW5kZXggNDBkZGZiN2YyMTBjZmEw
NDFkNWQ2ZmRkYTYwZDJmMGJhMjU1YWIwNi4uODljZjA1NDlhNjQzZDM5NmFhMzA0M2Y1ZDNmYTk2
MjllMWQ5NGM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkv
RGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
cHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuaApAQCAtNDMsNyArNDMsNyBAQCBw
dWJsaWM6CiAgICAgRGV2aWNlUHJveGltaXR5Q2xpZW50KiBkZXZpY2VQcm94aW1pdHlDbGllbnQo
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCk7CisgICAgdmlydHVhbCBSZWZQdHI8RXZlbnQ+IGdl
dExhc3RFdmVudCgpOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7
CiAgICAgc3RhdGljIERldmljZVByb3hpbWl0eUNvbnRyb2xsZXIqIGZyb20oUGFnZSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCA2
NDY1ODQwMDIwZWE2NTM5ZDgwZjRiNDNjMTdhNTQyZDhkM2I3MjcxLi40MWViMTA5ZTdiZWJkOGJl
ZjFiOTZlODY0NTI2MjU1NjM5MjUxZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtNjQ4LDcgKzY0OCw3IEBAIHZvaWQgV2ViU29j
a2V0OjpkaXNwYXRjaE9yUXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiAgICAgaWYgKG1f
c2hvdWxkRGVsYXlFdmVudEZpcmluZykKICAgICAgICAgbV9wZW5kaW5nRXZlbnRzLmFwcGVuZChX
VEY6Om1vdmUoZXZlbnQpKTsKICAgICBlbHNlCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoV1RGOjpt
b3ZlKGV2ZW50KSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiB9ICAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCmluZGV4IGRkZTEzM2Nj
N2M3MDE0NGUyZDEwMzQ0ZmE3NzIzM2M5MWYwNjVmZDQuLjk1NTk5ZTM4Y2FlYTcyZDg3OWI0MTg2
YTJjOTRhNmY5YzFhN2JiNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9h
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAKQEAgLTE4OCw3
ICsxODgsNyBAQCB2b2lkIEZvbnRMb2FkZXI6OmZpcmVQZW5kaW5nRXZlbnRzKCkKICAgICB9CiAK
ICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcGVuZGluZ0V2ZW50cy5zaXplKCk7
ICsraW5kZXgpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50c1tpbmRleF0ucmVs
ZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqcGVuZGluZ0V2ZW50c1tpbmRleF0pOwog
CiAgICAgaWYgKGxvYWRpbmdEb25lICYmICFtX2NhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgVmVjdG9yPFJlZlB0cjxWb2lkQ2FsbGJhY2s+PiBjYWxsYmFja3M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMTE1MWJkMWViYTViZTRl
OTY0OGU0ZjNhOWQwMjQ2MWRkYTM1ZGRiOC4uOTMwOTJiY2ZiN2ZkYjlmYTUxMjg3OWMzZjU0ODhh
MDQ4NjA3YzEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9s
bGVyLmNwcApAQCAtNzIsNyArNzIsNyBAQCBib29sIERldmljZU1vdGlvbkNvbnRyb2xsZXI6Omhh
c0xhc3REYXRhKCkKICAgICByZXR1cm4gZGV2aWNlTW90aW9uQ2xpZW50KCktPmxhc3RNb3Rpb24o
KTsKIH0KIAotUGFzc1JlZlB0cjxFdmVudD4gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6Z2V0TGFz
dEV2ZW50KCkKK1JlZlB0cjxFdmVudD4gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6Z2V0TGFzdEV2
ZW50KCkKIHsKICAgICByZXR1cm4gRGV2aWNlTW90aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuZGV2aWNlbW90aW9uRXZlbnQsIGRldmljZU1vdGlvbkNsaWVudCgpLT5sYXN0TW90aW9uKCkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgKaW5kZXgg
N2Q3MmQ1MTVjYzZkODEzZGMxZjM4YzYxOWU4OWUyY2RjZmQ0YjlkYS4uMTRkYzc0NGI1YjQ0YWRh
MDViM2YzZGIzYWRmODk4MWRjZjllZGEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RldmljZU1vdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNl
TW90aW9uQ29udHJvbGxlci5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBEZXZpY2VN
b3Rpb25DbGllbnQqIGRldmljZU1vdGlvbkNsaWVudCgpOwogCiAgICAgdmlydHVhbCBib29sIGhh
c0xhc3REYXRhKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRM
YXN0RXZlbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2
ZW50KCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUo
KTsKICAgICBzdGF0aWMgRGV2aWNlTW90aW9uQ29udHJvbGxlciogZnJvbShQYWdlKik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCmlu
ZGV4IGFjZTNiMmIyMjk2M2U4MTI2MzliOTA4MmNhYjg0NmQxMDE3Y2Q1MzYuLjM5NmJmOGNmNDA5
NTg0ODcxZmUwNmVhOTczYzMwZDVkNmZkOGMyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBAIGJv
b2wgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpoYXNMYXN0RGF0YSgpCiAgICAgcmV0dXJu
IGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCktPmxhc3RPcmllbnRhdGlvbigpOwogfQogCi1QYXNz
UmVmUHRyPEV2ZW50PiBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI6OmdldExhc3RFdmVudCgp
CitSZWZQdHI8RXZlbnQ+IERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50
KCkKIHsKICAgICByZXR1cm4gRGV2aWNlT3JpZW50YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5kZXZpY2VvcmllbnRhdGlvbkV2ZW50LCBkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpLT5s
YXN0T3JpZW50YXRpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3Jp
ZW50YXRpb25Db250cm9sbGVyLmgKaW5kZXggMTE4MzA2MzQ4NjllOTA2ZTU4NzczNzRiYjczYTJm
ZGU0ZThiOTI4Ny4uYjAxZjhkMWE2MmIwNDc5MmIzNWY4NDNhMmZmMDA4NTdhNTMxMTQzOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaApA
QCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXN1bWVVcGRhdGVzKCk7CiAjZWxz
ZQogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBS
ZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICBzdGF0
aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmlu
ZGV4IDhjMTBkMGU5NGMwMWI3MDc4YmQxMTIwYjY3NDQ1ZjY0NjY4YjVhOWMuLjkzZTY2ZTg0MTNi
OThjY2I3NGY5ZjM4ODJmNGQwNThjMWY0MDVmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApA
QCAtNDA1MCw3ICs0MDUwLDcgQEAgRXZlbnRMaXN0ZW5lciogRG9jdW1lbnQ6OmdldFdpbmRvd0F0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmUKICAgICByZXR1cm4g
bV9kb21XaW5kb3ctPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKIH0KIAot
dm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCwgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRG9jdW1lbnQ6OmRpc3Bh
dGNoV2luZG93RXZlbnQoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdldCogdGFyZ2V0KQogewogICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKICAgICBpZiAoIW1fZG9tV2luZG93KQpA
QCAtNDA2OCwyMSArNDA2OCwyMSBAQCB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRvd0xvYWRF
dmVudCgpCiAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnREaWRGaW5pc2hMb2Fk
RXZlbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVdpbmRvd0V2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVdpbmRvd0V2ZW50KFJlZjxF
dmVudD4mJiBldmVudCkKIHsKICAgICBldmVudC0+c2V0VGFyZ2V0KG1fZG9tV2luZG93LmdldCgp
KTsKLSAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KGV2ZW50KTsKKyAgICBtX2V2ZW50UXVl
dWUuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVudCkpOwogfQogCi12b2lkIERvY3VtZW50Ojpl
bnF1ZXVlRG9jdW1lbnRFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgRG9jdW1l
bnQ6OmVucXVldWVEb2N1bWVudEV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBldmVu
dC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQp
OworICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAK
LXZvaWQgRG9jdW1lbnQ6OmVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZU92ZXJmbG93RXZlbnQoUmVmPEV2ZW50PiYmIGV2
ZW50KQogewotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQpOworICAgIG1fZXZl
bnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKIFJlZlB0cjxFdmVu
dD4gRG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTU5ODAsMjQgKzU5ODAsMjQgQEAgdm9pZCBEb2N1bWVudDo6c2VuZFdp
bGxSZXZlYWxFZGdlRXZlbnRzSWZOZWVkZWQoY29uc3QgSW50UG9pbnQmIG9sZFBvc2l0aW9uLCBj
b24KICAgICAvLyBCb3R0b20gZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueSgpID49IHdpbGxS
ZXZlYWxCb3R0b21Ob3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi55KCkgPiBvbGRQb3Np
dGlvbi55KCkKICAgICAgICAgJiYgd2lsbFJldmVhbEJvdHRvbU5vdGlmaWNhdGlvblBvaW50ID49
IG9sZFBvc2l0aW9uLnkoKSkgewotICAgICAgICBSZWZQdHI8RXZlbnQ+IHdpbGxSZXZlYWxFdmVu
dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWxib3R0b21FdmVu
dCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsYm90dG9tRXZlbnQsIGZh
bHNlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdp
bmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1
ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAg
ICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgp
KTsKKyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxS
ZXZlYWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gVG9wIGVkZ2UuCiAgICAg
aWYgKG5ld1Bvc2l0aW9uLnkoKSA8PSB3aWxsUmV2ZWFsVG9wTm90aWZpY2F0aW9uUG9pbnQgJiYg
bmV3UG9zaXRpb24ueSgpIDwgb2xkUG9zaXRpb24ueSgpCiAgICAgICAgICYmIHdpbGxSZXZlYWxU
b3BOb3RpZmljYXRpb25Qb2ludCA8PSBvbGRQb3NpdGlvbi55KCkpIHsKLSAgICAgICAgUmVmUHRy
PEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJr
aXR3aWxscmV2ZWFsdG9wRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIFJlZjxFdmVudD4g
d2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0d2lsbHJl
dmVhbHRvcEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICBpZiAoIXRhcmdldCkKLSAgICAg
ICAgICAgIGVucXVldWVXaW5kb3dFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAg
ICAgICAgICAgIGVucXVldWVXaW5kb3dFdmVudChXVEY6Om1vdmUod2lsbFJldmVhbEV2ZW50KSk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgd2lsbFJldmVhbEV2ZW50LT5zZXRUYXJnZXQo
dGFyZ2V0KTsKLSAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQod2lsbFJldmVh
bEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50
KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjAw
NywyNCArNjAwNywyNCBAQCB2b2lkIERvY3VtZW50OjpzZW5kV2lsbFJldmVhbEVkZ2VFdmVudHNJ
Zk5lZWRlZChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbgogICAgIC8vIFJpZ2h0IGVk
Z2UuCiAgICAgaWYgKG5ld1Bvc2l0aW9uLngoKSA+PSB3aWxsUmV2ZWFsUmlnaHROb3RpZmljYXRp
b25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkgPiBvbGRQb3NpdGlvbi54KCkKICAgICAgICAgJiYg
d2lsbFJldmVhbFJpZ2h0Tm90aWZpY2F0aW9uUG9pbnQgPj0gb2xkUG9zaXRpb24ueCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAg
ICAgIFJlZjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlm
ICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVu
dC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3
aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3aWxsUmV2ZWFs
RXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVl
dWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRR
dWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgLy8gTGVmdCBlZGdlLgogICAgIGlmIChuZXdQb3NpdGlvbi54KCkgPD0g
d2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkgPCBvbGRQ
b3NpdGlvbi54KCkKICAgICAgICAgJiYgd2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Qb2ludCA8
PSBvbGRQb3NpdGlvbi54KCkpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiB3aWxsUmV2ZWFsRXZl
bnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsbGVmdEV2ZW50
LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBSZWY8RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWxsZWZ0RXZlbnQsIGZhbHNl
LCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRv
d0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdp
bmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAg
ICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsK
KyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZl
YWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5k
ZXggOTc2Y2RhMWFkNzA1ZjhjZWIzODRiYmM3YWM0MGEyZmUwODAzNTViNi4uN2NhYjMxNmQ3NTUw
YzliNmU1YWNhMzhkY2MwZTNkOTVhNWI4YTRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTc4
OCw3ICs3ODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIHNl
dFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwogICAgIEV2ZW50TGlzdGVuZXIqIGdldFdp
bmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hXaW5kb3dFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gPSBudWxscHRyKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQmLCBFdmVudFRhcmdldCogPSBu
dWxscHRyKTsKICAgICB2b2lkIGRpc3BhdGNoV2luZG93TG9hZEV2ZW50KCk7CiAKICAgICBSZWZQ
dHI8RXZlbnQ+IGNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNlcHRpb25D
b2RlJik7CkBAIC0xMDkyLDkgKzEwOTIsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
Q29udGV4dFRocmVhZCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgYm9vbCBp
c0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIHZvaWQgZW5xdWV1ZVdpbmRvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsK
LSAgICB2b2lkIGVucXVldWVEb2N1bWVudEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2
b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVu
cXVldWVXaW5kb3dFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZvaWQgZW5xdWV1ZURvY3VtZW50
RXZlbnQoUmVmPEV2ZW50PiYmKTsKKyAgICB2b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50KFJlZjxF
dmVudD4mJik7CiAgICAgdm9pZCBlbnF1ZXVlUGFnZXNob3dFdmVudChQYWdlc2hvd0V2ZW50UGVy
c2lzdGVuY2UpOwogICAgIHZvaWQgZW5xdWV1ZUhhc2hjaGFuZ2VFdmVudChjb25zdCBTdHJpbmcm
IG9sZFVSTCwgY29uc3QgU3RyaW5nJiBuZXdVUkwpOwogICAgIHZvaWQgZW5xdWV1ZVBvcHN0YXRl
RXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5jcHAKaW5kZXggYTdiYjVkZmUyY2Fm
ODQ4ZDRmNWY5MmUyODFjOTczMmU0OGEyZTlmOS4uOGVhNWVjMDM3NGJkMTM3ODg3MWQyYTYyZDk0
YTliOTc4MjBiYzZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZl
bnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5j
cHAKQEAgLTY4LDE1ICs2OCwxNSBAQCBEb2N1bWVudEV2ZW50UXVldWU6On5Eb2N1bWVudEV2ZW50
UXVldWUoKQogewogfQogCi1ib29sIERvY3VtZW50RXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBEb2N1bWVudEV2ZW50UXVldWU6OmVucXVldWVF
dmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7
Ci0gICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250YWlucyhldmVudC5nZXQoKSkpOworICAg
IEFTU0VSVCghbV9xdWV1ZWRFdmVudHMuY29udGFpbnMoZXZlbnQucHRyKCkpKTsKIAogICAgIGlm
IChtX2lzQ2xvc2VkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3F1ZXVlZEV2ZW50
cy5hZGQoZXZlbnQpOworICAgIG1fcXVldWVkRXZlbnRzLmFkZChldmVudC5wdHIoKSk7CiAgICAg
aWYgKCFtX3BlbmRpbmdFdmVudFRpbWVyLT5pc0FjdGl2ZSgpKQogICAgICAgICBtX3BlbmRpbmdF
dmVudFRpbWVyLT5zdGFydE9uZVNob3QoMCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05OSw5ICs5
OSw5IEBAIHZvaWQgRG9jdW1lbnRFdmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2
ZW50KE5vZGUmIHRhcmdldCkKICAgICBib29sIGJ1YmJsZXMgPSB0YXJnZXQuaXNEb2N1bWVudE5v
ZGUoKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBmYWxzZTsKIAotICAgIFJlZlB0cjxFdmVudD4g
c2Nyb2xsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgYnVi
YmxlcywgY2FuY2VsYWJsZSk7CisgICAgUmVmPEV2ZW50PiBzY3JvbGxFdmVudCA9IEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBidWJibGVzLCBjYW5jZWxhYmxlKTsKICAg
ICBzY3JvbGxFdmVudC0+c2V0VGFyZ2V0KCZ0YXJnZXQpOwotICAgIGVucXVldWVFdmVudChzY3Jv
bGxFdmVudC5yZWxlYXNlKCkpOworICAgIGVucXVldWVFdmVudChXVEY6Om1vdmUoc2Nyb2xsRXZl
bnQpKTsKIH0KIAogYm9vbCBEb2N1bWVudEV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2ZW50JiBl
dmVudCkKQEAgLTE0Niw5ICsxNDYsOSBAQCB2b2lkIERvY3VtZW50RXZlbnRRdWV1ZTo6ZGlzcGF0
Y2hFdmVudChFdmVudCYgZXZlbnQpCiAgICAgLy8gV2h5IGRvIHdlIGhhdmUgdGhpcyBzcGVjaWFs
IGNhc2UgaGVyZSBpbnN0ZWFkIG9mIGEgdmlydHVhbCBmdW5jdGlvbiBvbiBFdmVudFRhcmdldD8K
ICAgICBFdmVudFRhcmdldCYgZXZlbnRUYXJnZXQgPSAqZXZlbnQudGFyZ2V0KCk7CiAgICAgaWYg
KERPTVdpbmRvdyogd2luZG93ID0gZXZlbnRUYXJnZXQudG9ET01XaW5kb3coKSkKLSAgICAgICAg
d2luZG93LT5kaXNwYXRjaEV2ZW50KCZldmVudCwgMCk7CisgICAgICAgIHdpbmRvdy0+ZGlzcGF0
Y2hFdmVudChldmVudCwgbnVsbHB0cik7CiAgICAgZWxzZQotICAgICAgICBldmVudFRhcmdldC5k
aXNwYXRjaEV2ZW50KCZldmVudCk7CisgICAgICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQo
ZXZlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRF
dmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmgKaW5k
ZXggOTgyNWVkMmY2MDdhNDJhODdiNTExMzNhOWI4MTVlNTVlZjIzMGVkYy4uN2QxMTFkMmQ0YjVi
YTY5YzhiM2U3YzIyZjg3NDRjZTc5Njc1M2I5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dEV2ZW50UXVldWUuaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgRG9j
dW1lbnRFdmVudFF1ZXVlKERvY3VtZW50Jik7CiAgICAgdmlydHVhbCB+RG9jdW1lbnRFdmVudFF1
ZXVlKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAppbmRleCA5OGE2MTBmZWQxYzZhOTU0ZmExNDI3NGVmOWNhZTJjZjhhNzM5ODNjLi4zZDczZGVh
NjhmZjRkMzU4Y2MxMDhiZGJmY2JhNTM3NTM4NzUzM2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogICAgIGlmIChpc0Zv
cmNlRXZlbnQocGxhdGZvcm1FdmVudCkgJiYgIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlRm9y
RXZlbnRUeXBlKHBsYXRmb3JtRXZlbnQudHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUo
ZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtRXZlbnQsIGRldGFp
bCwgcmVsYXRlZFRhcmdldCk7CisgICAgUmVmPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3Vz
ZUV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRm
b3JtRXZlbnQsIGRldGFpbCwgcmVsYXRlZFRhcmdldCk7CiAKICAgICBpZiAobW91c2VFdmVudC0+
dHlwZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFNob3VsZG4ndCBoYXBw
ZW4uCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogICAgICAgICAv
LyBTcGVjaWFsIGNhc2U6IElmIGl0J3MgYSBkb3VibGUgY2xpY2sgZXZlbnQsIHdlIGFsc28gc2Vu
ZCB0aGUgZGJsY2xpY2sgZXZlbnQuIFRoaXMgaXMgbm90IHBhcnQKICAgICAgICAgLy8gb2YgdGhl
IERPTSBzcGVjcywgYnV0IGlzIHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb25kYmxj
bGljaz0iIiBhdHRyaWJ1dGUuIFRoaXMgaXMgdHJlYXRlZAogICAgICAgICAvLyBhcyBhIHNlcGFy
YXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMgbGlrZSBGaXJlZm94LCBh
bmQgc28gd2UgZG8gdGhlIHNhbWUuCi0gICAgICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBkb3VibGVD
bGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxNb3VzZUV2ZW50
PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7CiAgICAgICAgIGRvdWJs
ZUNsaWNrRXZlbnQtPmluaXRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50LAog
ICAgICAgICAgICAgbW91c2VFdmVudC0+YnViYmxlcygpLCBtb3VzZUV2ZW50LT5jYW5jZWxhYmxl
KCksIG1vdXNlRXZlbnQtPnZpZXcoKSwgbW91c2VFdmVudC0+ZGV0YWlsKCksCiAgICAgICAgICAg
ICBtb3VzZUV2ZW50LT5zY3JlZW5YKCksIG1vdXNlRXZlbnQtPnNjcmVlblkoKSwgbW91c2VFdmVu
dC0+Y2xpZW50WCgpLCBtb3VzZUV2ZW50LT5jbGllbnRZKCksCkBAIC0yODUsNyArMjg1LDcgQEAg
Ym9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoV2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxXaGVlbEV2
ZW50PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVudDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVudCgpLmRl
ZmF1bHRWaWV3KCkpOworICAgIFJlZjxXaGVlbEV2ZW50PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVu
dDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOwogCiAgICAgLy8gRXZl
bnRzIHdpdGggbm8gZGVsdGFzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSB0aGV5IGNvbnZleSBwbGF0
Zm9ybSBpbmZvcm1hdGlvbiBhYm91dCBzY3JvbGwgZ2VzdHVyZXMKICAgICAvLyBhbmQgbW9tZW50
dW0gYmVnaW5uaW5nIG9yIGVuZGluZy4gSG93ZXZlciwgdGhvc2UgZXZlbnRzIHNob3VsZCBub3Qg
YmUgc2VudCB0byB0aGUgRE9NIHNpbmNlIHNvbWUKQEAgLTMwMCw5ICszMDAsOSBAQCBib29sIEVs
ZW1lbnQ6OmRpc3BhdGNoV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50
KQogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50JiBwbGF0Zm9ybUV2ZW50KQogewotICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBldmVu
dCA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgpLmRlZmF1
bHRWaWV3KCkpOworICAgIFJlZjxLZXlib2FyZEV2ZW50PiBldmVudCA9IEtleWJvYXJkRXZlbnQ6
OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOwogICAgIGlm
IChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGZyYW1l
LT5ldmVudEhhbmRsZXIoKS5hY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKGV2
ZW50LmdldCgpKSkKKyAgICAgICAgaWYgKGZyYW1lLT5ldmVudEhhbmRsZXIoKS5hY2Nlc3NpYmls
aXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKGV2ZW50KSkKICAgICAgICAgICAgIGV2ZW50LT5z
dG9wUHJvcGFnYXRpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hFdmVudCh0aGlzLCBldmVudCkgJiYgIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwpAQCAt
MjMyNCw3ICsyMzI0LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVn
aW4oKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxh
dGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0
aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9u
KCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5cGUsIDEsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZvcmNlQXRDbGljayk7Ci0gICAgUmVmUHRy
PE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCA9ICBNb3VzZUV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2V3aWxsYmVnaW5FdmVudCwgZG9jdW1lbnQo
KS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNlRXZlbnQsIDAsIG51bGxwdHIpOworICAgIFJl
ZjxNb3VzZUV2ZW50PiBtb3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQgPSAgTW91c2VFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNld2lsbGJlZ2luRXZlbnQsIGRvY3VtZW50
KCkuZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm1Nb3VzZUV2ZW50LCAwLCBudWxscHRyKTsKICAgICBt
b3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKICAgICBkaXNwYXRjaEV2
ZW50KG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCmluZGV4IDU5
NmRkODU4YTA0YzM2M2E3NWU0OGVhY2Y4YTc0YTVhOGQ2ZWU4NTUuLjVjMWU2ZmU3MDEyNzhjZGU1
YWU2ZTAzZWQ4NWE1ZTI3NGQ3OWEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcApAQCAtMTYyLDEyICsx
NjIsMTIgQEAgUGFzc1JlZlB0cjxFdmVudD4gRXZlbnQ6OmNsb25lRm9yKEhUTUxJRnJhbWVFbGVt
ZW50KikgY29uc3QKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZSh0eXBlKCksIGJ1YmJsZXMoKSwg
Y2FuY2VsYWJsZSgpKTsKIH0KIAotdm9pZCBFdmVudDo6c2V0VGFyZ2V0KFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRXZlbnQ6OnNldFRhcmdldChSZWZQdHI8RXZlbnRUYXJn
ZXQ+JiYgdGFyZ2V0KQogewogICAgIGlmIChtX3RhcmdldCA9PSB0YXJnZXQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OworICAgIG1fdGFyZ2V0ID0gV1RGOjptb3Zl
KHRhcmdldCk7CiAgICAgaWYgKG1fdGFyZ2V0KQogICAgICAgICByZWNlaXZlZFRhcmdldCgpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnQuaAppbmRleCAwOWU3NzhkNTEzNmZmMGZjYTg2ZTRkYzI5ZmViYWFlODljMjE3
ZjBjLi4wY2NjZTEwODg1Mzg4NTJlMzFkNGYzNDIxNmNlY2QxOGU4OTQyMzNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnQuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFR5cGUoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KICAgICAKICAgICBFdmVudFRh
cmdldCogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CisgICAgdm9pZCBzZXRUYXJnZXQo
UmVmUHRyPEV2ZW50VGFyZ2V0PiYmKTsKIAogICAgIEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0OyB9CiAgICAgdm9pZCBzZXRDdXJyZW50
VGFyZ2V0KEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0KSB7IG1fY3VycmVudFRhcmdldCA9IGN1
cnJlbnRUYXJnZXQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXgg
MmJkYzM1MGI1YTVmNzYzMzBiMmQ3ZGI3NjgyYjc2Zjg4NjUzYWEyZC4uMzQxODQ3ZmQzODAyODhm
MzAwZTBkODNiNmIwNDNkYWJlNTIxNzQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0
Y2hlci5jcHAKQEAgLTcwLDkgKzcwLDkgQEAgYm9vbCBXaW5kb3dFdmVudENvbnRleHQ6OmhhbmRs
ZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoIW1fd2luZG93KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBldmVudC5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOworICAg
IGV2ZW50LnNldFRhcmdldChtX3RhcmdldC5jb3B5UmVmKCkpOwogICAgIGV2ZW50LnNldEN1cnJl
bnRUYXJnZXQobV93aW5kb3cuZ2V0KCkpOwotICAgIG1fd2luZG93LT5maXJlRXZlbnRMaXN0ZW5l
cnMoJmV2ZW50KTsKKyAgICBtX3dpbmRvdy0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjAxLDEwICsyMDEsMTAgQEAgaW5saW5lIEV2ZW50VGFy
Z2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhOb2RlJiByZWZlcmVuY2VOb2Rl
KQogICAgIHJldHVybiAmcmVmZXJlbmNlTm9kZTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6
OmRpc3BhdGNoU2NvcGVkRXZlbnQoTm9kZSYgbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
Cit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiBub2RlLCBF
dmVudCYgZXZlbnQpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHRhcmdldCBoZXJlIGJl
Y2F1c2UgaXQgY2FuIGdvIGF3YXkgYnkgdGhlIHRpbWUgd2UgYWN0dWFsbHkgZmlyZSB0aGUgZXZl
bnQuCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxl
cyhub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rhcmdl
dFJ1bGVzKG5vZGUpKTsKICAgICBTY29wZWRFdmVudFF1ZXVlOjpzaW5nbGV0b24oKS5lbnF1ZXVl
RXZlbnQoZXZlbnQpOwogfQogCkBAIC0zMDAsMjMgKzMwMCwxOSBAQCBzdGF0aWMgdm9pZCBkaXNw
YXRjaEV2ZW50SW5ET00oRXZlbnQmIGV2ZW50LCBjb25zdCBFdmVudFBhdGgmIHBhdGgsIFdpbmRv
d0V2ZW50QwogICAgIH0KIH0KIAotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQo
Tm9kZSogb3JpZ2luLCBQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jvb2wgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG9yaWdpbiwgRXZlbnQmIGV2ZW50KQogewogICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBpZiAoIXBycEV2ZW50KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIEFTU0VSVChvcmlnaW4pOwogICAgIFJlZlB0cjxOb2Rl
PiBub2RlKG9yaWdpbik7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudChwcnBFdmVudCk7CiAgICAg
UmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IG5vZGUtPmRvY3VtZW50KCkudmlldygpOwotICAgIEV2
ZW50UGF0aCBldmVudFBhdGgoKm5vZGUsICpldmVudCk7CisgICAgRXZlbnRQYXRoIGV2ZW50UGF0
aCgqbm9kZSwgZXZlbnQpOwogCi0gICAgaWYgKEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0g
ZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKKyAgICBpZiAoRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJn
ZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0KCkpCiAgICAgICAgIGV2ZW50UGF0aC5zZXRSZWxhdGVk
VGFyZ2V0KCpub2RlLCAqcmVsYXRlZFRhcmdldCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykg
JiYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoaXM8VG91Y2hFdmVudD4oKmV2ZW50KSkgewotICAg
ICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRvd25jYXN0PFRvdWNoRXZlbnQ+
KCpldmVudCkpKQorICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkpIHsKKyAgICAgICAgaWYg
KCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cyhkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudCkp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCkBAIC0zMjQsOCArMzIw
LDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogb3JpZ2luLCBQ
YXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBDaGlsZE5vZGVzTGF6eVNuYXBzaG90Ojp0
YWtlQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCgpOwogCiAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9
IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKTsKLSAgICBldmVudC0+c2V0
VGFyZ2V0KHRhcmdldCk7Ci0gICAgaWYgKCFldmVudC0+dGFyZ2V0KCkpCisgICAgZXZlbnQuc2V0
VGFyZ2V0KHRhcmdldCk7CisgICAgaWYgKCFldmVudC50YXJnZXQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighTm9FdmVudERp
c3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CkBAIC0zMzQsMzAg
KzMzMCwzMCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmln
aW4sIFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogCiAgICAgSW5wdXRFbGVtZW50Q2xpY2tT
dGF0ZSBjbGlja0hhbmRsaW5nU3RhdGU7CiAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpu
b2RlKSkKLSAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxEaXNw
YXRjaEV2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAgZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxEaXNwYXRjaEV2ZW50KGV2ZW50LCBjbGlja0hh
bmRsaW5nU3RhdGUpOwogCi0gICAgaWYgKCFldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYg
IWV2ZW50UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTSgqZXZlbnQs
IGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsKKyAgICBpZiAoIWV2ZW50LnByb3BhZ2F0
aW9uU3RvcHBlZCgpICYmICFldmVudFBhdGguaXNFbXB0eSgpKQorICAgICAgICBkaXNwYXRjaEV2
ZW50SW5ET00oZXZlbnQsIGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsKIAotICAgIGV2
ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsK
LSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKLSAgICBldmVudC0+c2V0RXZl
bnRQaGFzZSgwKTsKKyAgICBldmVudC5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFy
Z2V0UnVsZXMoKm5vZGUpKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOwor
ICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoMCk7CiAKICAgICBpZiAoY2xpY2tIYW5kbGluZ1N0YXRl
LnN0YXRlZnVsKQotICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkuZGlk
RGlzcGF0Y2hDbGlja0V2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAg
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLmRpZERpc3BhdGNoQ2xpY2tFdmVudChl
dmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAgIC8vIENhbGwgZGVmYXVsdCBldmVudCBo
YW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHByZXZlbnRpbmcK
ICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhhbmRsZXJzIGFy
ZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5k
IG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgp
ICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgY2FsbERlZmF1bHRFdmVudEhh
bmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKCpldmVudCwgZXZlbnRQYXRoKTsKKyAgICBpZiAoIWV2
ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZlbnQuZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAg
ICAgY2FsbERlZmF1bHRFdmVudEhhbmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKGV2ZW50LCBldmVu
dFBhdGgpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gsIHRoZSBl
dmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCiAgICAgLy8gb3V0ZXJtb3N0IHNoYWRvdyBET00g
Ym91bmRhcnkuCi0gICAgZXZlbnQtPnNldFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFyZ2V0
KCkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOworICAgIGV2ZW50LnNl
dFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFyZ2V0KCkpOworICAgIGV2ZW50LnNldEN1cnJl
bnRUYXJnZXQobnVsbHB0cik7CiAKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVk
KCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzaG91bGRFdmVudENyb3NzU2hhZG93Qm91bmRhcnkoRXZlbnQmIGV2ZW50LCBT
aGFkb3dSb290JiBzaGFkb3dSb290LCBFdmVudFRhcmdldCYgdGFyZ2V0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDY0MDQwZGQzY2M0YmU4N2JlYjYxOGMyMDljZjQ5ZjIy
YzQwNjU0ZDIuLmYxODlkN2E0ZGYyYjg1ZDI3YWY3NDVjZmFlM2FhZTQ2ODBkYTkzNTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTM4LDExICszOCwxMSBAQCBjbGFzcyBO
b2RlOwogCiBuYW1lc3BhY2UgRXZlbnREaXNwYXRjaGVyIHsKIAotYm9vbCBkaXNwYXRjaEV2ZW50
KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50Pik7Ci12b2lkIGRpc3BhdGNoU2NvcGVkRXZlbnQoTm9k
ZSYsIFBhc3NSZWZQdHI8RXZlbnQ+KTsKK2Jvb2wgZGlzcGF0Y2hFdmVudChOb2RlKiwgRXZlbnQm
KTsKK3ZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiwgRXZlbnQmKTsKIHZvaWQgZGlzcGF0
Y2hTaW11bGF0ZWRDbGljayhFbGVtZW50KiwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCwgU2ltdWxh
dGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucywgU2ltdWxhdGVkQ2xpY2tWaXN1YWxPcHRpb25zKTsK
IAotfTsKK30KIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaAppbmRleCBlOTkzNGM1MDhjMmYx
NjQ5ZDU0YjgwYjY1OGZmNmRjYmI0MTdlMWY3Li5hYzM5ZWM2MTdhZjhlZDQ2MmE1MWNkZWU3YTE1
ZDFmNDg4Mjg0YjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKQEAgLTM2LDcgKzM2LDcgQEAg
Y2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudFF1ZXVlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5F
dmVudFF1ZXVlKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChQYXNzUmVmUHRy
PEV2ZW50PikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYm
KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50JikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjbG9zZSgpID0gMDsgLy8gRGlzY2FyZCBhY2N1bXVsYXRlZCBldmVudHMgYW5k
IGFsbCBmdXR1cmUgZXZlbnRzLiBObyBldmVudHMgd2lsbCBiZSBkaXNwYXRjaGVkIGFmdGVyIHRo
aXMuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXggNzYyYTZhNTI4ZjM1MTM0
MzNjZGJkY2Y5NDBhNmU2Mjk3OTczNjI1Yi4uYWI1MTU5MjJhYjRiNzAwYmYxZTZlYjM4Mjk2NzM3
NDdhYTg2ZGUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCkBAIC0xMzQsNyArMTM0
LDcgQEAgYm9vbCBFdmVudFRhcmdldDo6Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogICAgIHJldHVybiByZW1vdmVFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTsKIH0KIAotYm9vbCBFdmVudFRhcmdldDo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiti
b29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KEV2ZW50KiBldmVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgaWYgKCFldmVudCkgewogICAgICAgICBlYyA9IFR5cGVFcnJvcjsKQEAg
LTE0OSwxNiArMTQ5LDE2IEBAIGJvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmICghc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZGlz
cGF0Y2hFdmVudChldmVudCk7CisgICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIH0K
IAotYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKK2Jvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAg
IGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhp
cyk7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7Ci0gICAgYm9v
bCBkZWZhdWx0UHJldmVudGVkID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LmdldCgpKTsKLSAg
ICBldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKKyAgICBldmVudC5zZXRUYXJnZXQodGhpcyk7Cisg
ICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICBldmVudC5zZXRFdmVudFBoYXNl
KEV2ZW50OjpBVF9UQVJHRVQpOworICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZpcmVFdmVu
dExpc3RlbmVycyhldmVudCk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsKICAgICByZXR1
cm4gZGVmYXVsdFByZXZlbnRlZDsKIH0KIApAQCAtMTY2LDMwICsxNjYsMzAgQEAgdm9pZCBFdmVu
dFRhcmdldDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCiB7CiB9CiAKLXN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIGxlZ2FjeVR5cGUoY29uc3QgRXZlbnQqIGV2ZW50KQorc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyYgbGVnYWN5VHlwZShjb25zdCBFdmVudCYgZXZlbnQpCiB7
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50
KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50
KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50Owog
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZl
bnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uc3RhcnRF
dmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2
ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbml0
ZXJhdGlvbkV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1h
dGlvbml0ZXJhdGlvbkV2ZW50KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdEFu
aW1hdGlvbkl0ZXJhdGlvbkV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50
TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQpCiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCku
d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLndoZWVsRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVz
KCkud2hlZWxFdmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZl
bnQ7CiAKICAgICByZXR1cm4gZW1wdHlBdG9tOwogfQogCi1ib29sIEV2ZW50VGFyZ2V0OjpmaXJl
RXZlbnRMaXN0ZW5lcnMoRXZlbnQqIGV2ZW50KQorYm9vbCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50
TGlzdGVuZXJzKEV2ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTighTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRk
ZW4oKSk7Ci0gICAgQVNTRVJUKGV2ZW50ICYmIGV2ZW50LT5pc0luaXRpYWxpemVkKCkpOworICAg
IEFTU0VSVChldmVudC5pc0luaXRpYWxpemVkKCkpOwogCiAgICAgRXZlbnRUYXJnZXREYXRhKiBk
ID0gZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgaWYgKCFkKQpAQCAtMjAwLDIxICsyMDAsMjEgQEAg
Ym9vbCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCkKICAgICBp
ZiAoIWxlZ2FjeVR5cGVOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgbGVnYWN5TGlzdGVuZXJzVmVj
dG9yID0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5maW5kKGxlZ2FjeVR5cGVOYW1lKTsKIAotICAgIEV2
ZW50TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAu
ZmluZChldmVudC0+dHlwZSgpKTsKKyAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lcnNW
ZWN0b3IgPSBkLT5ldmVudExpc3RlbmVyTWFwLmZpbmQoZXZlbnQudHlwZSgpKTsKIAogICAgIGlm
IChsaXN0ZW5lcnNWZWN0b3IpCiAgICAgICAgIGZpcmVFdmVudExpc3RlbmVycyhldmVudCwgZCwg
Kmxpc3RlbmVyc1ZlY3Rvcik7CiAgICAgZWxzZSBpZiAobGVnYWN5TGlzdGVuZXJzVmVjdG9yKSB7
Ci0gICAgICAgIEF0b21pY1N0cmluZyB0eXBlTmFtZSA9IGV2ZW50LT50eXBlKCk7Ci0gICAgICAg
IGV2ZW50LT5zZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKKyAgICAgICAgQXRvbWljU3RyaW5nIHR5
cGVOYW1lID0gZXZlbnQudHlwZSgpOworICAgICAgICBldmVudC5zZXRUeXBlKGxlZ2FjeVR5cGVO
YW1lKTsKICAgICAgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBkLCAqbGVnYWN5TGlzdGVu
ZXJzVmVjdG9yKTsKLSAgICAgICAgZXZlbnQtPnNldFR5cGUodHlwZU5hbWUpOworICAgICAgICBl
dmVudC5zZXRUeXBlKHR5cGVOYW1lKTsKICAgICB9CiAKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZh
dWx0UHJldmVudGVkKCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9
CiAgICAgICAgIAotdm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBl
dmVudCwgRXZlbnRUYXJnZXREYXRhKiBkLCBFdmVudExpc3RlbmVyVmVjdG9yJiBlbnRyeSkKK3Zv
aWQgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQsIEV2ZW50VGFy
Z2V0RGF0YSogZCwgRXZlbnRMaXN0ZW5lclZlY3RvciYgZW50cnkpCiB7CiAgICAgUmVmPEV2ZW50
VGFyZ2V0PiBwcm90ZWN0KCp0aGlzKTsKIApAQCAtMjI2LDMyICsyMjYsMzIgQEAgdm9pZCBFdmVu
dFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCwgRXZlbnRUYXJnZXREYXRh
KiBkLCBFdmVudExpc3QKICAgICBzaXplX3Qgc2l6ZSA9IGVudHJ5LnNpemUoKTsKICAgICBpZiAo
IWQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzKQogICAgICAgICBkLT5maXJpbmdFdmVudEl0ZXJhdG9y
cyA9IHN0ZDo6bWFrZV91bmlxdWU8RmlyaW5nRXZlbnRJdGVyYXRvclZlY3Rvcj4oKTsKLSAgICBk
LT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXBwZW5kKEZpcmluZ0V2ZW50SXRlcmF0b3IoZXZlbnQt
PnR5cGUoKSwgaSwgc2l6ZSkpOworICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5hcHBlbmQo
RmlyaW5nRXZlbnRJdGVyYXRvcihldmVudC50eXBlKCksIGksIHNpemUpKTsKIAogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbnVsbHB0cjsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnRDb29raWU7CiAgICAgaWYgKGlzPERvY3VtZW50
Pihjb250ZXh0KSkgewogICAgICAgICBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250
ZXh0KTsKLSAgICAgICAgd2lsbERpc3BhdGNoRXZlbnRDb29raWUgPSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KCpkb2N1bWVudCwgKmV2ZW50LCBzaXplID4gMCk7
CisgICAgICAgIHdpbGxEaXNwYXRjaEV2ZW50Q29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsRGlzcGF0Y2hFdmVudCgqZG9jdW1lbnQsIGV2ZW50LCBzaXplID4gMCk7CiAgICAg
fQogCiAgICAgZm9yICg7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXImIHJlZ2lzdGVyZWRMaXN0ZW5lciA9IGVudHJ5W2ldOwotICAgICAgICBpZiAoZXZl
bnQtPmV2ZW50UGhhc2UoKSA9PSBFdmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmICFyZWdpc3RlcmVk
TGlzdGVuZXIudXNlQ2FwdHVyZSkKKyAgICAgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UoKSA9PSBF
dmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmICFyZWdpc3RlcmVkTGlzdGVuZXIudXNlQ2FwdHVyZSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZXZlbnQtPmV2ZW50UGhhc2UoKSA9
PSBFdmVudDo6QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUp
CisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJVQkJMSU5HX1BIQVNF
ICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgLy8gSWYgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIGhhcyBiZWVuIGNhbGxl
ZCwgd2UganVzdCBicmVhayBvdXQgaW1tZWRpYXRlbHksIHdpdGhvdXQKICAgICAgICAgLy8gaGFu
ZGxpbmcgYW55IG1vcmUgZXZlbnRzIG9uIHRoaXMgdGFyZ2V0LgotICAgICAgICBpZiAoZXZlbnQt
PmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBpZiAoZXZlbnQuaW1tZWRp
YXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsSGFuZGxlRXZlbnQoY29udGV4dCwgKmV2ZW50KTsKKyAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbEhhbmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKICAgICAgICAgLy8gVG8gbWF0Y2gg
TW96aWxsYSwgdGhlIEFUX1RBUkdFVCBwaGFzZSBmaXJlcyBib3RoIGNhcHR1cmluZyBhbmQgYnVi
YmxpbmcKICAgICAgICAgLy8gZXZlbnQgbGlzdGVuZXJzLCBldmVuIHRob3VnaCB0aGF0IHZpb2xh
dGVzIHNvbWUgdmVyc2lvbnMgb2YgdGhlIERPTSBzcGVjLgotICAgICAgICByZWdpc3RlcmVkTGlz
dGVuZXIubGlzdGVuZXItPmhhbmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKKyAgICAgICAgcmVn
aXN0ZXJlZExpc3RlbmVyLmxpc3RlbmVyLT5oYW5kbGVFdmVudChjb250ZXh0LCAmZXZlbnQpOwog
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KGNvb2tpZSk7
CiAgICAgfQogICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5yZW1vdmVMYXN0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCmluZGV4IDY4OGU2ZmY3MGI5MmNiNjg5M2JjOTlkZTc5MGYwNjg5
ZDdhNzkyZWYuLjcwNzc3NzQxYTdjNGZhMjcxZjAzZWFjMjNlYzc0NmZiOWM1NmEzY2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5oCkBAIC0xMjMsOCArMTIzLDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICB2aXJ0dWFs
IGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwg
RXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUFsbEV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pOwotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiwgRXhjZXB0aW9uQ29kZSYpOyAvLyBET00gQVBJCisgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnQmKTsKKyAgICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQqLCBFeGNlcHRpb25D
b2RlJik7IC8vIERPTSBBUEkKICAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRpb25JbkV2
ZW50SGFuZGxlcigpOwogCiAgICAgLy8gVXNlZCBmb3IgbGVnYWN5ICJvbkV2ZW50IiBhdHRyaWJ1
dGUgQVBJcy4KQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNDYXB0dXJp
bmdFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAgICAgY29u
c3QgRXZlbnRMaXN0ZW5lclZlY3RvciYgZ2V0RXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpOwogCi0gICAgYm9vbCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQqKTsK
KyAgICBib29sIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYpOwogICAgIGJvb2wgaXNGaXJpbmdF
dmVudExpc3RlbmVycygpOwogCiAgICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpT
bG90VmlzaXRvciYpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIHJlZkV2ZW50VGFyZ2V0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFy
Z2V0KCkgPSAwOwogICAgIAotICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiwgRXZl
bnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYpOworICAgIHZvaWQgZmlyZUV2ZW50
TGlzdGVuZXJzKEV2ZW50JiwgRXZlbnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYp
OwogCiAgICAgZnJpZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0dlbmVyaWNFdmVudFF1ZXVlLmNwcAppbmRleCA3MmRkMGZlZWQwMmFlMmRjN2M5
ZjNmZDZjZDdjZGE5OTMxNmMzOTJhLi5kYmE4NTI3MGRiNDc5NGY2ZmFiMjNhMjZiMzlmMWNiNTk0
YjFkZDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9HZW5lcmljRXZlbnRRdWV1ZS5jcHAKQEAgLTEw
MCw3ICsxMDAsNyBAQCB2b2lkIEdlbmVyaWNFdmVudFF1ZXVlOjpkaXNwYXRjaE9uZUV2ZW50KCkK
ICAgICBSZWY8RXZlbnRUYXJnZXQ+IHByb3RlY3QobV9vd25lcik7CiAgICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IG1fcGVuZGluZ0V2ZW50cy50YWtlRmlyc3QoKTsKICAgICBFdmVudFRhcmdldCYg
dGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpID8gKmV2ZW50LT50YXJnZXQoKSA6IG1fb3duZXI7Ci0g
ICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKKyAgICB0YXJnZXQuZGlz
cGF0Y2hFdmVudCgqZXZlbnQpOwogfQogCiB2b2lkIEdlbmVyaWNFdmVudFF1ZXVlOjpjbG9zZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCBjMzI1Njg0NGY0ODQ1OGU5YmM3NDdj
YzBlOWQ5ZDM3NTA3OGQ4ZWIwLi5hM2FiODk2YmY1M2NmOGEwN2RlNWU5MmZlOTY3NzQ5M2E2Zjk0
M2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTE2MCw5ICsxNjAsOCBAQCB2
b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPSBNZXNz
YWdlUG9ydDo6ZW50YW5nbGVQb3J0cygqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXVEY6Om1v
dmUoY2hhbm5lbHMpKTsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6
OmNyZWF0ZShXVEY6Om1vdmUocG9ydHMpLCBtZXNzYWdlLnJlbGVhc2UoKSk7Ci0KLSAgICAgICAg
ZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAg
ICAgUmVmPEV2ZW50PiBldmVudCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFdURjo6bW92ZShwb3J0
cyksIG1lc3NhZ2UucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMzg3Y2FlYjBmNTNiYzEyYjg0OTYzMDBmOWI4
MzhlN2JhOWJiMjk3NC4uMDhmYTAyNDZhNTMzYTUyODJlMzQ2Y2FlMTY0YWIyZWI0YTUwYTU4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcApAQCAtMjA5MCwxOSArMjA5MCwxOSBAQCB2b2lkIE5vZGU6OmhhbmRs
ZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpICYm
IGRvd25jYXN0PEVsZW1lbnQ+KCp0aGlzKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiBldmVu
dC5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlyZUV2ZW50TGlzdGVu
ZXJzKCZldmVudCk7CisgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIH0KIAotdm9pZCBO
b2RlOjpkaXNwYXRjaFNjb3BlZEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBO
b2RlOjpkaXNwYXRjaFNjb3BlZEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQoKnRoaXMsIGV2ZW50KTsKIH0KIAotYm9vbCBOb2Rl
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBOb2RlOjpkaXNw
YXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAh
UExBVEZPUk0oSU9TKQotICAgIGlmIChpczxUb3VjaEV2ZW50PigqZXZlbnQpKQotICAgICAgICBy
ZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFkb3B0UmVmKGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2
ZW50LmxlYWtSZWYoKSkpKTsKKyAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpKQorICAgICAg
ICByZXR1cm4gZGlzcGF0Y2hUb3VjaEV2ZW50KGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KSk7
CiAjZW5kaWYKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMs
IGV2ZW50KTsKIH0KQEAgLTIxMjYsMjQgKzIxMjYsMjQgQEAgdm9pZCBOb2RlOjpkaXNwYXRjaFN1
YnRyZWVNb2RpZmllZEV2ZW50KCkKIGJvb2wgTm9kZTo6ZGlzcGF0Y2hET01BY3RpdmF0ZUV2ZW50
KGludCBkZXRhaWwsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKIHsKICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9u
Ojppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgUmVmUHRyPFVJRXZlbnQ+IGV2ZW50
ID0gVUlFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50LCB0cnVlLCB0
cnVlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIGRldGFpbCk7CisgICAgUmVmPFVJRXZlbnQ+
IGV2ZW50ID0gVUlFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50LCB0
cnVlLCB0cnVlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIGRldGFpbCk7CiAgICAgZXZlbnQt
PnNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQpOwogICAgIGRpc3BhdGNoU2NvcGVk
RXZlbnQoZXZlbnQpOwogICAgIHJldHVybiBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKTsKIH0KIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFQTEFURk9STShJT1MpCi1ib29sIE5vZGU6OmRp
c3BhdGNoVG91Y2hFdmVudChQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+IGV2ZW50KQorYm9vbCBOb2Rl
OjpkaXNwYXRjaFRvdWNoRXZlbnQoVG91Y2hFdmVudCYgZXZlbnQpCiB7CiAgICAgcmV0dXJuIEV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVudCk7CiB9CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShJTkRJRV9VSSkKLWJvb2wgTm9kZTo6ZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChQ
YXNzUmVmUHRyPFVJUmVxdWVzdEV2ZW50PiBldmVudCkKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hVSVJl
cXVlc3RFdmVudChVSVJlcXVlc3RFdmVudCYgZXZlbnQpCiB7CiAgICAgRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZW50KHRoaXMsIGV2ZW50KTsKLSAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCkgfHwgZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gZXZlbnQu
ZGVmYXVsdEhhbmRsZWQoKSB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAjZW5kaWYK
ICAgICAKQEAgLTIxNTMsOCArMjE1Myw4IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hCZWZvcmVMb2Fk
RXZlbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgUmVmPE5vZGU+IHByb3RlY3QoKnRoaXMpOwotICAgIFJlZlB0cjxCZWZvcmVMb2FkRXZlbnQ+
IGJlZm9yZUxvYWRFdmVudCA9IEJlZm9yZUxvYWRFdmVudDo6Y3JlYXRlKHNvdXJjZVVSTCk7Ci0g
ICAgZGlzcGF0Y2hFdmVudChiZWZvcmVMb2FkRXZlbnQuZ2V0KCkpOworICAgIFJlZjxCZWZvcmVM
b2FkRXZlbnQ+IGJlZm9yZUxvYWRFdmVudCA9IEJlZm9yZUxvYWRFdmVudDo6Y3JlYXRlKHNvdXJj
ZVVSTCk7CisgICAgZGlzcGF0Y2hFdmVudChiZWZvcmVMb2FkRXZlbnQpOwogICAgIHJldHVybiAh
YmVmb3JlTG9hZEV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4
IGVmZjA4NmE1YmVlMmUwYmY4NWI3N2FjODdlYmMyMWE1MDc1M2FiZDcuLjdiNThmNGY4ZDIzYThk
YTIxOWY4Yzk0ZjgzZmI3OWFjNWE0OTIyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNTE5LDkgKzUxOSw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSkg
b3ZlcnJpZGU7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2
aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAotICAgIHZv
aWQgZGlzcGF0Y2hTY29wZWRFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBkaXNw
YXRjaFNjb3BlZEV2ZW50KEV2ZW50Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxF
dmVudHMoRXZlbnQmKTsKIApAQCAtNTMzLDEwICs1MzMsMTAgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGJvb2wgZGlz
cGF0Y2hUb3VjaEV2ZW50KFBhc3NSZWZQdHI8VG91Y2hFdmVudD4pOworICAgIGJvb2wgZGlzcGF0
Y2hUb3VjaEV2ZW50KFRvdWNoRXZlbnQmKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTkRJRV9VSSkK
LSAgICBib29sIGRpc3BhdGNoVUlSZXF1ZXN0RXZlbnQoUGFzc1JlZlB0cjxVSVJlcXVlc3RFdmVu
dD4pOworICAgIGJvb2wgZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChVSVJlcXVlc3RFdmVudCYpOwog
I2VuZGlmCiAKICAgICBib29sIGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1
ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcAppbmRleCAy
MGYxOGNkNGMyY2I4NzJlNjc2ZGM3MTUzNjc1ZjVlOWViODQ2ZjM5Li45MzUwMTMyMzQ4NGEzNTQ0
MzhmNDFkYTFiMzk3MDAzYWE5ZDk3YTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NvcGVkRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50
UXVldWUuY3BwCkBAIC00MywyNyArNDMsMjcgQEAgU2NvcGVkRXZlbnRRdWV1ZSYgU2NvcGVkRXZl
bnRRdWV1ZTo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gc2NvcGVkRXZlbnRRdWV1ZTsKIH0KIAot
dm9pZCBTY29wZWRFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQpCit2b2lkIFNjb3BlZEV2ZW50UXVldWU6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZl
bnQpCiB7CiAgICAgaWYgKG1fc2NvcGluZ0xldmVsKQotICAgICAgICBtX3F1ZXVlZEV2ZW50cy5h
cHBlbmQoZXZlbnQpOworICAgICAgICBtX3F1ZXVlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2
ZW50KSk7CiAgICAgZWxzZQogICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAotdm9p
ZCBTY29wZWRFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KSBjb25zdAordm9pZCBTY29wZWRFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVu
dCkgY29uc3QKIHsKLSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsKKyAgICBBU1NFUlQoZXZl
bnQudGFyZ2V0KCkpOwogICAgIC8vIFN0b3JlIHRoZSB0YXJnZXQgaW4gYSBsb2NhbCB2YXJpYWJs
ZSB0byBhdm9pZCBwb3NzaWJseSBkZXJlZmVyZW5jaW5nIGEgbnVsbGlmaWVkIFBhc3NSZWZQdHIg
YWZ0ZXIgaXQncyBwYXNzZWQgb24uCi0gICAgTm9kZSogbm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+
dG9Ob2RlKCk7CisgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldCgpLT50b05vZGUoKTsKICAg
ICBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQobm9kZSwgZXZlbnQpOwogfQogCiB2b2lk
IFNjb3BlZEV2ZW50UXVldWU6OmRpc3BhdGNoQWxsRXZlbnRzKCkKIHsKLSAgICBWZWN0b3I8UmVm
UHRyPEV2ZW50Pj4gcXVldWVkRXZlbnRzID0gV1RGOjptb3ZlKG1fcXVldWVkRXZlbnRzKTsKKyAg
ICBWZWN0b3I8UmVmPEV2ZW50Pj4gcXVldWVkRXZlbnRzID0gV1RGOjptb3ZlKG1fcXVldWVkRXZl
bnRzKTsKICAgICBmb3IgKGF1dG8mIHF1ZXVlZEV2ZW50IDogcXVldWVkRXZlbnRzKQotICAgICAg
ICBkaXNwYXRjaEV2ZW50KHF1ZXVlZEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNo
RXZlbnQocXVldWVkRXZlbnQpOwogfQogCiB2b2lkIFNjb3BlZEV2ZW50UXVldWU6OmluY3JlbWVu
dFNjb3BpbmdMZXZlbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZl
bnRRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuaAppbmRleCBj
ZjZiMjljOGQ5OTEzN2IwNWVjNjRlNjA0N2YzNDJlNWEyN2RmY2IwLi43OGJiYzY1ZjM5YWRkMzdk
NDIxYmUwNDJlMzA5ZjliZmFiMDUxNzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NvcGVkRXZlbnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1
ZXVlLmgKQEAgLTQ2LDE4ICs0NiwxOCBAQCBjbGFzcyBTY29wZWRFdmVudFF1ZXVlIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRFdmVudFF1ZXVlKTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIFNjb3BlZEV2ZW50UXVldWUmIHNpbmdsZXRvbigp
OwotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVu
cXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOwogCiBwcml2YXRlOgogICAgIFNjb3BlZEV2ZW50UXVl
dWUoKSA9IGRlZmF1bHQ7CiAgICAgflNjb3BlZEV2ZW50UXVldWUoKSA9IGRlbGV0ZTsKIAotICAg
IHZvaWQgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PikgY29uc3Q7CisgICAgdm9pZCBk
aXNwYXRjaEV2ZW50KEV2ZW50JikgY29uc3Q7CiAgICAgdm9pZCBkaXNwYXRjaEFsbEV2ZW50cygp
OwogICAgIHZvaWQgaW5jcmVtZW50U2NvcGluZ0xldmVsKCk7CiAgICAgdm9pZCBkZWNyZW1lbnRT
Y29waW5nTGV2ZWwoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3F1ZXVlZEV2ZW50
czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9xdWV1ZWRFdmVudHM7CiAgICAgdW5zaWduZWQg
bV9zY29waW5nTGV2ZWwgeyAwIH07CiAKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ry
b3llZDxXZWJDb3JlOjpTY29wZWRFdmVudFF1ZXVlPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCA0MmY1ZTc5OTM5MmY1MWZjNzlkZGQxMTM1
MzM5MmFlNDc2YmMyZWZiLi5mMDUyZDg2ZWI1NDUwYzI3MDM4YmQ1NGNkZGQ1NmM4Yzg1ZDA5OWY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBA
IC00MDQsNyArNDA0LDcgQEAgYm9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaXNwYXRjaEVy
cm9yRXZlbnQoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludAogCiAgICAgQVNTRVJUKCFt
X2luRGlzcGF0Y2hFcnJvckV2ZW50KTsKICAgICBtX2luRGlzcGF0Y2hFcnJvckV2ZW50ID0gdHJ1
ZTsKLSAgICBSZWZQdHI8RXJyb3JFdmVudD4gZXJyb3JFdmVudCA9IEVycm9yRXZlbnQ6OmNyZWF0
ZShtZXNzYWdlLCBzb3VyY2VOYW1lLCBsaW5lLCBjb2x1bW4pOworICAgIFJlZjxFcnJvckV2ZW50
PiBlcnJvckV2ZW50ID0gRXJyb3JFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsIHNvdXJjZU5hbWUsIGxp
bmUsIGNvbHVtbik7CiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGVycm9yRXZlbnQpOwogICAg
IG1faW5EaXNwYXRjaEVycm9yRXZlbnQgPSBmYWxzZTsKICAgICByZXR1cm4gZXJyb3JFdmVudC0+
ZGVmYXVsdFByZXZlbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggNjg5Mzc3MGVlMDFkNmRiNWZhOTZlMTJh
NDcwMzExMTZkYzNiMzk3ZS4uYjcxZjk3M2U3ZTMwMWJlZDA0MTc3YWI3NmFhYWIwYTMxZTZjNTdm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCkBAIC02ODIsMTAgKzY4MiwxMCBAQCBib29sIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZl
YwogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKICAgICAgICAgdmll
dy0+ZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigp
OwogCi0gICAgUmVmUHRyPFRleHRFdmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRp
Y3RhdGlvbihtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0LCBkaWN0YXRpb25B
bHRlcm5hdGl2ZXMpOworICAgIFJlZjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVh
dGVGb3JEaWN0YXRpb24obV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHRyaWdn
ZXJpbmdFdmVudCk7CiAKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9F
WENFUFRJT04pOworICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgcmV0dXJu
IGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
aW5kZXggYWY1Mjg2ZGM5MWVhZmVlYWEwYWFiNmE5NjVmNDZmN2M5ODI1MGRlYy4uY2YxYmUyYWJl
NjRmYTc0NmFlNmIxMDViNDY0MTc4MGI3NDUwZTUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcApAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNv
bnN0IFN0cmluZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQogICAgIE5vZGUqIHRh
cmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkK
ICAgICAgICAgcmV0dXJuOwotICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNy
ZWF0ZUZvclBsYWluVGV4dFBhc3RlKGRvY3VtZW50KCkuZG9tV2luZG93KCksIHBhc3RpbmdUZXh0
LCBzbWFydFJlcGxhY2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICB0YXJnZXQtPmRpc3BhdGNo
RXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JQbGFpblRleHRQYXN0ZShkb2N1bWVudCgpLmRvbVdp
bmRvdygpLCBwYXN0aW5nVGV4dCwgc21hcnRSZXBsYWNlKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpw
YXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBwYXN0aW5nRnJhZ21l
bnQsIGJvb2wgc21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUsIE1haWxCbG9ja3F1b3RlSGFu
ZGxpbmcgcmVzcGVjdHNNYWlsQmxvY2txdW90ZSkKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEVk
aXRvcjo6cGFzdGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcGFzdGlu
Z0ZyYWdtZW50LCBib29sCiAgICAgTm9kZSogdGFyZ2V0ID0gZmluZEV2ZW50VGFyZ2V0RnJvbVNl
bGVjdGlvbigpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47Ci0gICAgdGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yRnJhZ21lbnRQYXN0ZShkb2N1bWVu
dCgpLmRvbVdpbmRvdygpLCBwYXN0aW5nRnJhZ21lbnQsIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHls
ZSwgcmVzcGVjdHNNYWlsQmxvY2txdW90ZSksIElHTk9SRV9FWENFUFRJT04pOworICAgIHRhcmdl
dC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckZyYWdtZW50UGFzdGUoZG9jdW1l
bnQoKS5kb21XaW5kb3coKSwgcGFzdGluZ0ZyYWdtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5
bGUsIHJlc3BlY3RzTWFpbEJsb2NrcXVvdGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQ
bGFpblRleHRCeXBhc3NpbmdESFRNTCgpCkBAIC04NTEsOCArODUxLDggQEAgYm9vbCBFZGl0b3I6
OmRpc3BhdGNoQ1BQRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERhdGFUcmFu
c2ZlckFjY2Vzc1AKIAogICAgIFJlZlB0cjxEYXRhVHJhbnNmZXI+IGRhdGFUcmFuc2ZlciA9IERh
dGFUcmFuc2Zlcjo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKHBvbGljeSk7CiAKLSAgICBSZWZQdHI8
RXZlbnQ+IGV2ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHRydWUsIHRy
dWUsIGRhdGFUcmFuc2Zlcik7Ci0gICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJR05P
UkVfRVhDRVBUSU9OKTsKKyAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNy
ZWF0ZShldmVudFR5cGUsIHRydWUsIHRydWUsIGRhdGFUcmFuc2Zlcik7CisgICAgdGFyZ2V0LT5k
aXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICBib29sIG5vRGVmYXVsdFByb2Nlc3NpbmcgPSBldmVu
dC0+ZGVmYXVsdFByZXZlbnRlZCgpOwogICAgIGlmIChub0RlZmF1bHRQcm9jZXNzaW5nICYmIHBv
bGljeSA9PSBEYXRhVHJhbnNmZXJBY2Nlc3NQb2xpY3k6OldyaXRhYmxlKSB7CiAgICAgICAgIGF1
dG8gcGFzdGVib2FyZCA9IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwpAQCAt
MTAxMiw5ICsxMDEyLDkgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnRzKFBhc3NSZWZQdHI8RWxlbWVudD4gcHJwU3RhcnRSb28KICAgICBSZWZQdHI8RWxl
bWVudD4gc3RhcnRSb290ID0gcHJwU3RhcnRSb290OwogICAgIFJlZlB0cjxFbGVtZW50PiBlbmRS
b290ID0gcHJwRW5kUm9vdDsKICAgICBpZiAoc3RhcnRSb290KQotICAgICAgICBzdGFydFJvb3Qt
PmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVD
b250ZW50Q2hhbmdlZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAg
ICAgICAgc3RhcnRSb290LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAg
aWYgKGVuZFJvb3QgJiYgZW5kUm9vdCAhPSBzdGFydFJvb3QpCi0gICAgICAgIGVuZFJvb3QtPmRp
c3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250
ZW50Q2hhbmdlZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgZW5kUm9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJr
aXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiB2b2lk
IEVkaXRvcjo6YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4g
Y21kKQpAQCAtMTcyMCw4ICsxNzIwLDggQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNv
bnN0IFN0cmluZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgLy8gV2Ugc2hv
dWxkIHNlbmQgdGhpcyBldmVudCBiZWZvcmUgc2VuZGluZyBhIFRleHRFdmVudCBhcyB3cml0dGVu
IGluIFNlY3Rpb24gNi4yLjIgYW5kIDYuMi4zIG9mCiAgICAgLy8gdGhlIERPTSBFdmVudCBzcGVj
aWZpY2F0aW9uLgogICAgIGlmIChFbGVtZW50KiB0YXJnZXQgPSBkb2N1bWVudCgpLmZvY3VzZWRF
bGVtZW50KCkpIHsKLSAgICAgICAgUmVmUHRyPENvbXBvc2l0aW9uRXZlbnQ+IGV2ZW50ID0gQ29t
cG9zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBk
b2N1bWVudCgpLmRvbVdpbmRvdygpLCB0ZXh0KTsKLSAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2
ZW50KGV2ZW50LnJlbGVhc2UoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIFJlZjxDb21w
b3NpdGlvbkV2ZW50PiBldmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuY29tcG9zaXRpb25lbmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7Cisg
ICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgfQogCiAgICAgLy8gSWYg
dGV4dCBpcyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJlLiAgSWYg
dGV4dCBpcyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dApAQCAtMTc5NSw4ICsx
Nzk1LDggQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBldmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
Y29tcG9zaXRpb25lbmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKGV2ZW50LmdldCgpKQotICAgICAgICAgICAgdGFyZ2V0LT5kaXNw
YXRjaEV2ZW50KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKGV2ZW50KQor
ICAgICAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KCpldmVudCk7CiAgICAgfQogCiAgICAg
Ly8gSWYgdGV4dCBpcyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJl
LiAgSWYgdGV4dCBpcyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCA1YjY4ZjU3Y2ZhYzBiYmNhOWYxOGI0MmIxYTVhYjBiMTVmYmM4NThiLi43ODk3MmM3NTIyNmJk
ZjU0Y2I3NDU0OTcyNzg3NjNkYzQ3MmEwM2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTgyLDE2ICsxODIsMTYgQEAg
UmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudCYgZG9jdW1l
bnQsIERvY3VtZW50RnJhZ21lbnQqIGYKICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmlu
Z05vZGVzVG9GcmFnbWVudChob2xkZXIuZ2V0KCkpOwogCiAgICAgLy8gR2l2ZSB0aGUgcm9vdCBh
IGNoYW5jZSB0byBjaGFuZ2UgdGhlIHRleHQuCi0gICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50PiBldnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOwotICAg
IGVkaXRhYmxlUm9vdC0+ZGlzcGF0Y2hFdmVudChldnQsIEFTU0VSVF9OT19FWENFUFRJT04pOwot
ICAgIGlmICh0ZXh0ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhhc1JpY2hseUVk
aXRhYmxlU3R5bGUoKSkgeworICAgIFJlZjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQg
PSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOworICAgIGVkaXRhYmxlUm9v
dC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgaWYgKHRleHQgIT0gZXZlbnQtPnRleHQoKSB8
fCAhZWRpdGFibGVSb290LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgcmVz
dG9yZUFuZFJlbW92ZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsK
IAogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldnQtPnRleHQo
KSk7CisgICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwg
ZXZlbnQtPnRleHQoKSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAKaW5kZXggZmQ3MjE5ZDYwYTNhOGZmYTY2NmUwMTVl
NWRhMTA1MmIyNmNjMWM1Yy4uY2NjM2RkZWFlMmU3ZTg1NmJmZDIzODNmZmVlZDUxMGMxNTQ3OGI3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VD
b21tYW5kLmNwcApAQCAtNjMsOSArNjMsOSBAQCBTdHJpbmcgZGlzcGF0Y2hCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAg
IGlmIChOb2RlKiBzdGFydE5vZGUgPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uc3RhcnQoKS5jb250
YWluZXJOb2RlKCkpIHsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICAvLyBTZW5kIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LiBUaGUg
ZXZlbnQgaGFuZGxlciB3aWxsIHVwZGF0ZSB0ZXh0IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAg
IFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZ0ID0gQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQ6OmNyZWF0ZSh0ZXh0KTsKLSAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpLT5kaXNwYXRjaEV2ZW50KGV2dCwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAg
ICAgICBuZXdUZXh0ID0gZXZ0LT50ZXh0KCk7CisgICAgICAgICAgICBSZWY8QmVmb3JlVGV4dElu
c2VydGVkRXZlbnQ+IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZSh0ZXh0
KTsKKyAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5kaXNwYXRj
aEV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIG5ld1RleHQgPSBldmVudC0+dGV4dCgpOwogICAg
ICAgICB9CiAgICAgfQogICAgIHJldHVybiBuZXdUZXh0OwpAQCAtNzcsOCArNzcsOCBAQCBib29s
IGNhbkFwcGVuZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudDo6Y3JlYXRlKFN0cmluZygiXG4iKSk7Ci0gICAgbm9kZS0+ZGlzcGF0Y2hFdmVu
dChldmVudCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgUmVmPEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50PiBldmVudCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUoU3RyaW5nKCJcbiIp
KTsKKyAgICBub2RlLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPnRl
eHQoKS5sZW5ndGgoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKaW5kZXggOTU3YTk3ZWFhMjQzNzg0Y2JmNTMyOGNkZWU3MTMwZjg0NjZlMmQ4YS4uMGFkNjFm
MzdlYzIxY2I0MWE4MTI2ZWUzNDYzNDI2NTA2NmFkMmQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC01MTIwLDEwICs1MTIwLDkgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjptZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFu
Z2VkKE1lZGlhUGwKICAgICB1cGRhdGVNZWRpYVN0YXRlKFVwZGF0ZU1lZGlhU3RhdGU6OkFzeW5j
aHJvbm91c2x5KTsKIH0KIAotYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQorYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRj
aEV2ZW50KEV2ZW50JiBldmVudCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZl
bnQ7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRw
bGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2No
YW5nZWRFdmVudCkKICAgICAgICAgc2NoZWR1bGVEZWxheWVkQWN0aW9uKENoZWNrUGxheWJhY2tU
YXJnZXRDb21wYXRhYmxpdHkpOwogICAgIHJldHVybiBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hFdmVu
dChldmVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDA1
MGFjYjQ2MDcxYTRmZWM1NGFmMWM2ZmU3ZjMxZjBhZTE5ODA1OTMuLmEwM2YyYzRmYzZmZGVmNmYy
ZWE3ZjJmNGUzZTA4NTY1YWVlZmZiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCkBAIC01NjQsNyArNTY0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVucXVldWVQbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVudCgpOwogCiAgICAgdXNpbmcgRXZlbnRU
YXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50
KEV2ZW50Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKaW5kZXggZDZiMWY5YTZlYjRk
NzJkOTllMGFkOTFiODUyNGI5ZDRmOGM0NTE0NS4uYjNlYjNiODA0ZWRiNDNjNWU3OGI4ZTRjZGU3
MTljZTBjYmRlMmM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3Bw
CkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpkaWRDb21wbGV0ZUxv
YWQoTG9hZFN0YXR1cyBzdGF0dXMpCiAKICAgICBpZiAoc3RhdHVzID09IEZhaWx1cmUpIHsKICAg
ICAgICAgc2V0UmVhZHlTdGF0ZShIVE1MVHJhY2tFbGVtZW50OjpUUkFDS19FUlJPUik7Ci0gICAg
ICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwg
ZmFsc2UsIGZhbHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGRpc3BhdGNoRXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIEhUTUxUcmFj
a0VsZW1lbnQ6OmRpZENvbXBsZXRlTG9hZChMb2FkU3RhdHVzIHN0YXR1cykKIAogICAgIC8vICAg
ICAyLiBJZiB0aGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCwgZmlyZSBhIHNpbXBs
ZSBldmVudCBuYW1lZCBsb2FkIGF0IHRoZSAKICAgICAvLyAgICAgICAgdHJhY2sgZWxlbWVudC4K
LSAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwg
ZmFsc2UsIGZhbHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgZGlzcGF0Y2hFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiAv
LyBOT1RFOiBUaGUgdmFsdWVzIGluIHRoZSBUZXh0VHJhY2s6OlJlYWRpbmVzc1N0YXRlIGVudW0g
bXVzdCBzdGF5IGluIHN5bmMgd2l0aCB0aG9zZSBpbiBIVE1MVHJhY2tFbGVtZW50OjpSZWFkeVN0
YXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCmluZGV4IDk2MzcyNDQ2
NzY4NzQwNGVkNjJlZTM3ZDAxNGVmNGQ2NTMzNzA3MjEuLmRiYjAyYWI5ZTk0OTEyMTk0NmEwMGVi
YWQ3M2ExODIwYzdmMTZiMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5j
cHAKQEAgLTU0NCwxMSArNTQ0LDExIEBAIHZvaWQgTWVkaWFDb250cm9sbGVyOjpzY2hlZHVsZUV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKQogCiB2b2lkIE1lZGlhQ29udHJvbGxl
cjo6YXN5bmNFdmVudFRpbWVyRmlyZWQoKQogewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBw
ZW5kaW5nRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBwZW5kaW5nRXZlbnRzOwogCiAg
ICAgbV9wZW5kaW5nRXZlbnRzLnN3YXAocGVuZGluZ0V2ZW50cyk7CiAgICAgZm9yIChhdXRvJiBw
ZW5kaW5nRXZlbnQgOiBwZW5kaW5nRXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRp
bmdFdmVudC5yZWxlYXNlKCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBkaXNwYXRjaEV2
ZW50KHBlbmRpbmdFdmVudCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sbGVyOjpjbGVhclBvc2l0
aW9uVGltZXJGaXJlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29u
dHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaAppbmRleCA3
NTMzYjQ4YzI3OGY1ZDYxYzVmNmUwMjJjZTc0YzM2MTg1Njg0MmJjLi4zMTVlZWNkMTkxYTNjNjc5
YTEyMjBjYzBmNmQ5YjgzY2QwZjI1MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L01lZGlhQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9s
bGVyLmgKQEAgLTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tdXRlZDsKICAg
ICBSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKICAgICBQbGF5YmFja1N0YXRlIG1fcGxheWJhY2tT
dGF0ZTsKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9wZW5kaW5nRXZlbnRzOworICAgIFZl
Y3RvcjxSZWY8RXZlbnQ+PiBtX3BlbmRpbmdFdmVudHM7CiAgICAgVGltZXIgbV9hc3luY0V2ZW50
VGltZXI7CiAgICAgbXV0YWJsZSBUaW1lciBtX2NsZWFyUG9zaXRpb25UaW1lcjsKICAgICBTdHJp
bmcgbV9tZWRpYUdyb3VwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCAzMzBjOTUwNGIwNzY5ZDk0MDcy
MzE3ZGRkMjk5M2QyOThiOWY5YWRjLi5lZDMwNDlkMzg2NjY0OTQ1ZTA5OWQ2NjNkYTgyOWRiNjU5
MjM4ZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtNDc2Niw3ICs0NzY2LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2lt
dWxhdGlvbigpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250
ZXh0TG9zdEV2ZW50KCkKIHsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0g
V2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2
ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOworICAgIFJlZjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQg
PSBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0
RXZlbnQsIGZhbHNlLCB0cnVlLCAiIik7CiAgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZl
bnQpOwogICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwog
ICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3Jl
QWxsb3dlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3Jp
cHRSdW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5jcHAKaW5kZXggZWVhMGVjNzU3NWQ3NzNjOGI0OTU1NWI4NmQ2NGI5ODAzZmVmYWNiOC4uZWRi
MDYyNzJjYzgwMTk0Nzk4YmZhMmZlZjBiNGIwNDFiYWQxYWZkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAg
c3RhdGljIFVSTCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihEb2N1bWVudCogZG9jdW1l
bnQpCiAgICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKTsKIH0K
IAotaW5saW5lIFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpCitpbmxp
bmUgUmVmPEV2ZW50PiBjcmVhdGVTY3JpcHRMb2FkRXZlbnQoKQogewogICAgIHJldHVybiBFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKaW5kZXggYzI0NThkMjVlYTk0
ODNmNGQ4NmE2M2M1MDg2NzY1ZDVmNTYzOGUxNC4uYTZiMWRiYjg4NDRlNzMxMWM1NmE4NGI4NWIz
OGQzNzcxYjEzNjEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3Vl
LmNwcApAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjppbnZhbGlkYXRlQ3Vl
SW5kZXgoKQogICAgIG1fY3VlSW5kZXggPSBpbnZhbGlkQ3VlSW5kZXg7CiB9CiAKLWJvb2wgVGV4
dFRyYWNrQ3VlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBU
ZXh0VHJhY2tDdWU6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIC8vIFdoZW4g
YSBUZXh0VHJhY2sncyBtb2RlIGlzIGRpc2FibGVkOiBubyBjdWVzIGFyZSBhY3RpdmUsIG5vIGV2
ZW50cyBmaXJlZC4KICAgICBpZiAoIXRyYWNrKCkgfHwgdHJhY2soKS0+bW9kZSgpID09IFRleHRU
cmFjazo6ZGlzYWJsZWRLZXl3b3JkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RleHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuaAppbmRleCBlYzJhYjIyZTJmNzYzZTg0MDdmYTNkMTg5ZDk2ZGJjMGU4ZDZjYjgyLi42
NGU2ZmQyNTBiY2YxYjM5OWRjMjMzZTNmNDEyMWVkYTg4Y2E1ZDcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAg
IHZvaWQgaW52YWxpZGF0ZUN1ZUluZGV4KCk7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlz
cGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBv
dmVycmlkZTsKIAogICAgIGJvb2wgaXNBY3RpdmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNB
Y3RpdmUoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA5ZDA2
MTk5NmQ3NzM2ZDY5YTAxNmJiMDUyN2U4ZDM1ZDM1MDE2MWU2Li42OGRlZDIzMTUzZTA3NmNlMWZk
MTZmYmI1ZDNmZTJmMTlkYTI5YTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKQEAgLTI4NTksNyArMjg1OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmhhbmRsZVVubG9hZEV2
ZW50cyhVbmxvYWRFdmVudFBvbGljeSB1bmxvYWRFdmVudFBvbGljeSkKICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY3NzAKIAogICAgICAg
ICAgICAgaWYgKCFtX2ZyYW1lLmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8RXZlbnQ+IHVubG9hZEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBSZWY8RXZl
bnQ+IHVubG9hZEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBm
YWxzZSwgZmFsc2UpKTsKICAgICAgICAgICAgICAgICAvLyBUaGUgRG9jdW1lbnRMb2FkZXIgKGFu
ZCB0aHVzIGl0cyBEb2N1bWVudExvYWRUaW1pbmcpIG1pZ2h0IGdldCBkZXN0cm95ZWQKICAgICAg
ICAgICAgICAgICAvLyB3aGlsZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQsIHNvIHByb3RlY3QgaXQg
dG8gcHJldmVudCB3cml0aW5nIHRoZSBlbmQKICAgICAgICAgICAgICAgICAvLyB0aW1lIGludG8g
ZnJlZWQgbWVtb3J5LgpAQCAtMjkwNSwxOCArMjkwNSwxOCBAQCBib29sIEZyYW1lTG9hZGVyOjpo
YW5kbGVCZWZvcmVVbmxvYWRFdmVudChDaHJvbWUmIGNocm9tZSwgRnJhbWVMb2FkZXIqIGZyYW1l
TG9hZAogICAgIGlmICghZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIAotICAgIFJlZlB0cjxCZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2Fk
RXZlbnQgPSBCZWZvcmVVbmxvYWRFdmVudDo6Y3JlYXRlKCk7CisgICAgUmVmPEJlZm9yZVVubG9h
ZEV2ZW50PiBiZWZvcmVVbmxvYWRFdmVudCA9IEJlZm9yZVVubG9hZEV2ZW50OjpjcmVhdGUoKTsK
ICAgICBtX3BhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IFBhZ2VEaXNtaXNzYWxU
eXBlOjpCZWZvcmVVbmxvYWQ7CiAKICAgICB7CiAgICAgICAgIEZvcmJpZFByb21wdHNTY29wZSBm
b3JiaWRQcm9tcHRzKG1fZnJhbWUucGFnZSgpKTsKLSAgICAgICAgZG9tV2luZG93LT5kaXNwYXRj
aEV2ZW50KGJlZm9yZVVubG9hZEV2ZW50LmdldCgpLCBkb21XaW5kb3ctPmRvY3VtZW50KCkpOwor
ICAgICAgICBkb21XaW5kb3ctPmRpc3BhdGNoRXZlbnQoYmVmb3JlVW5sb2FkRXZlbnQsIGRvbVdp
bmRvdy0+ZG9jdW1lbnQoKSk7CiAgICAgfQogCiAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWlu
Z0Rpc3BhdGNoZWQgPSBQYWdlRGlzbWlzc2FsVHlwZTo6Tm9uZTsKIAogICAgIGlmICghYmVmb3Jl
VW5sb2FkRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSkKLSAgICAgICAgZG9jdW1lbnQtPmRlZmF1
bHRFdmVudEhhbmRsZXIoYmVmb3JlVW5sb2FkRXZlbnQuZ2V0KCkpOworICAgICAgICBkb2N1bWVu
dC0+ZGVmYXVsdEV2ZW50SGFuZGxlcihiZWZvcmVVbmxvYWRFdmVudC5wdHIoKSk7CiAgICAgaWYg
KGJlZm9yZVVubG9hZEV2ZW50LT5yZXR1cm5WYWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKaW5kZXggOTg5MDk5NDBlMzQ0ZjNiMjg2YjIwY2I1MWFk
MTIwODA2ZjIyM2QyMy4uODhlN2VlMmIyNTMxZGZmNzE3NjFmMmM1ZTcwY2U0ODJlODhiYTRlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUhvc3QuY3BwCkBAIC0zNTAsNyArMzUwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6ZGlzcGF0Y2hET01FdmVudChFdmVudElEIGlkLCBpbnQgdG90YWwsIGludCBkb25lKQog
ICAgICAgICAgICAgZXZlbnQgPSBQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVl
LCBkb25lLCB0b3RhbCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV2ZW50ID0gRXZlbnQ6
OmNyZWF0ZShldmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG1fZG9tQXBwbGljYXRp
b25DYWNoZS0+ZGlzcGF0Y2hFdmVudChldmVudCwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAg
ICAgIG1fZG9tQXBwbGljYXRpb25DYWNoZS0+ZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDFlZmFlYjQxYTc4ZjJlY2E5ODg1
M2Y3NzIxZDllOGU1Zjk0NWU4NTkuLmY4OWUxOTQ2ODg5NGYzNTMwMmRkNTVjZjA0ZTMxYzBlNmMy
YTk2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIFJlZjxNZXNzYWdlRXZlbnQ+
IGV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzID0gTWVzc2FnZVBv
cnQ6OmVudGFuZ2xlUG9ydHMoKmNvbnRleHQsIFdURjo6bW92ZShtX2NoYW5uZWxzKSk7CiAgICAg
ICAgIHJldHVybiBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZVBvcnRzKSwg
bV9tZXNzYWdlLCBtX29yaWdpbiwgU3RyaW5nKCksIG1fc291cmNlKTsKQEAgLTkyOCw3ICs5Mjgs
NyBAQCB2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGlt
ZXImIHRpbWVyKQogICAgIGRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKHRpbWVy
LnRhcmdldE9yaWdpbigpLCB0aW1lci5ldmVudChkb2N1bWVudCgpKSwgdGltZXIuc3RhY2tUcmFj
ZSgpKTsKIH0KIAotdm9pZCBET01XaW5kb3c6OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdp
bkNoZWNrKFNlY3VyaXR5T3JpZ2luKiBpbnRlbmRlZFRhcmdldE9yaWdpbiwgUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlKQordm9p
ZCBET01XaW5kb3c6OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3VyaXR5
T3JpZ2luKiBpbnRlbmRlZFRhcmdldE9yaWdpbiwgRXZlbnQmIGV2ZW50LCBQYXNzUmVmUHRyPFNj
cmlwdENhbGxTdGFjaz4gc3RhY2tUcmFjZSkKIHsKICAgICBpZiAoaW50ZW5kZWRUYXJnZXRPcmln
aW4pIHsKICAgICAgICAgLy8gQ2hlY2sgdGFyZ2V0IG9yaWdpbiBub3cgc2luY2UgdGhlIHRhcmdl
dCBkb2N1bWVudCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSB0aW1lciB3YXMgc2NoZWR1bGVk
LgpAQCAtMTg3MCw3ICsxODcwLDcgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIKIAogdm9pZCBE
T01XaW5kb3c6OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGxvYWRF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkp
OworICAgIFJlZjxFdmVudD4gbG9hZEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
bG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmxv
YWRlcigpLmRvY3VtZW50TG9hZGVyKCkgJiYgIW1fZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9h
ZGVyKCktPnRpbWluZygpLmxvYWRFdmVudFN0YXJ0KCkpIHsKICAgICAgICAgLy8gVGhlIERvY3Vt
ZW50TG9hZGVyIChhbmQgdGh1cyBpdHMgRG9jdW1lbnRMb2FkVGltaW5nKSBtaWdodCBnZXQgZGVz
dHJveWVkIHdoaWxlIGRpc3BhdGNoaW5nCiAgICAgICAgIC8vIHRoZSBldmVudCwgc28gcHJvdGVj
dCBpdCB0byBwcmV2ZW50IHdyaXRpbmcgdGhlIGVuZCB0aW1lIGludG8gZnJlZWQgbWVtb3J5LgpA
QCAtMTg5MiwzNCArMTg5MiwzMyBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hMb2FkRXZlbnQo
KQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9hZEV2ZW50RmlyZWQoZnJhbWUoKSk7
CiB9CiAKLWJvb2wgRE9NV2luZG93OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBy
cEV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBUYXJnZXQpCitib29sIERPTVdpbmRv
dzo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAg
ICAgUmVmPEV2ZW50VGFyZ2V0PiBwcm90ZWN0KCp0aGlzKTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2
ZW50ID0gcHJwRXZlbnQ7CiAKICAgICAvLyBQYXVzaW5nIGEgcGFnZSBtYXkgdHJpZ2dlciBwYWdl
aGlkZSBhbmQgcGFnZXNob3cgZXZlbnRzLiBXZWJDb3JlIGFsc28gaW1wbGljaXRseSBmaXJlcyB0
aGVzZQogICAgIC8vIGV2ZW50cyB3aGVuIGNsb3NpbmcgYSBXZWJWaWV3LiBIZXJlIHdlIGtlZXAg
dHJhY2sgb2YgdGhlIHN0YXRlIG9mIHRoZSBwYWdlIHRvIHByZXZlbnQgZHVwbGljYXRlLAogICAg
IC8vIHVuYmFsYW5jZWQgZXZlbnRzIHBlciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcGFnZXNob3cg
ZXZlbnQ6CiAgICAgLy8gPGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvbXVsdGlwYWdlL2hpc3RvcnkuaHRtbCNldmVudC1wYWdlc2hvdz4uCi0gICAgaWYg
KGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09IFBhZ2VUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VU
eXBlKSB7Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wYWdlc2hv
d0V2ZW50KSB7CisgICAgaWYgKGV2ZW50LmV2ZW50SW50ZXJmYWNlKCkgPT0gUGFnZVRyYW5zaXRp
b25FdmVudEludGVyZmFjZVR5cGUpIHsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkucGFnZXNob3dFdmVudCkgewogICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0
dXMgPT0gUGFnZVN0YXR1c1Nob3duKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBF
dmVudCB3YXMgcHJldmlvdXNseSBkaXNwYXRjaGVkOyBkbyBub3QgZmlyZSBhIGR1cGxpY2F0ZSBl
dmVudC4KICAgICAgICAgICAgIG1fbGFzdFBhZ2VTdGF0dXMgPSBQYWdlU3RhdHVzU2hvd247Ci0g
ICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZWhpZGVF
dmVudCkgeworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
cGFnZWhpZGVFdmVudCkgewogICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFn
ZVN0YXR1c0hpZGRlbikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRXZlbnQgd2Fz
IHByZXZpb3VzbHkgZGlzcGF0Y2hlZDsgZG8gbm90IGZpcmUgYSBkdXBsaWNhdGUgZXZlbnQuCiAg
ICAgICAgICAgICBtX2xhc3RQYWdlU3RhdHVzID0gUGFnZVN0YXR1c0hpZGRlbjsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGV2ZW50LT5zZXRUYXJnZXQocHJwVGFyZ2V0ID8gcHJwVGFyZ2V0IDog
dGhpcyk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNl
dEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KHRhcmdl
dCA/IHRhcmdldCA6IHRoaXMpOworICAgIGV2ZW50LnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Cisg
ICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKIAotICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3coZnJhbWUoKSwgKmV2ZW50LCAqdGhpcyk7CisgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnRPbldpbmRvdyhmcmFtZSgpLCBldmVudCwgKnRoaXMp
OwogCi0gICAgYm9vbCByZXN1bHQgPSBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQuZ2V0KCkpOwor
ICAgIGJvb2wgcmVzdWx0ID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIAogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93KGNvb2tpZSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4IDBkOGQ5NTM1YWI3NDNkOTI5Njc1YTViYzQwYjE0
NDI4YjhjNTI3ZWQuLmI1MDAxYmNmMWI3MDZmZTcwZWI0OGY0YTc4NzFlNzI2YjJiYTFhNTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtMjQ0LDcgKzI0NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgLy8gTmVlZGVkIGZvciBPYmplY3RpdmUtQyBiaW5kaW5ncyAoc2VlIGJ1
ZyAyODc3NCkuCiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiwgY29uc3QgU3RyaW5nJiB0YXJnZXRP
cmlnaW4sIERPTVdpbmRvdyYgc291cmNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQg
cG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGltZXImKTsKLSAgICAgICAgdm9pZCBk
aXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhPcmlnaW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5k
ZWRUYXJnZXRPcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
U2NyaXB0Q2FsbFN0YWNrPik7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRo
T3JpZ2luQ2hlY2soU2VjdXJpdHlPcmlnaW4qIGludGVuZGVkVGFyZ2V0T3JpZ2luLCBFdmVudCYs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+KTsKIAogICAgICAgICB2b2lk
IHNjcm9sbEJ5KGludCB4LCBpbnQgeSkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2Nyb2xsVG8oaW50
IHgsIGludCB5KSBjb25zdDsKQEAgLTI3OCw3ICsyNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpIG92ZXJyaWRl
OwogCiAgICAgICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgICAgICBi
b29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQsIFBhc3NSZWZQdHI8
RXZlbnRUYXJnZXQ+IHBycFRhcmdldCk7CisgICAgICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVu
dCYsIEV2ZW50VGFyZ2V0Kik7CiAKICAgICAgICAgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcAppbmRleCA5MjU3NTRlYzQz
NjEwZTdhN2Y2OTliNjg0ODE1MmU3MmM4NWFmNjIxLi4zYzM4NDMwOTU2MzQ5NjIyYWUyZTE5ZmQ1
Yjc2MDM4NWM5NTkwNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5j
cHAKQEAgLTcxLDkgKzcxLDggQEAgdm9pZCBEZXZpY2VDb250cm9sbGVyOjpyZW1vdmVBbGxEZXZp
Y2VFdmVudExpc3RlbmVycyhET01XaW5kb3cqIHdpbmRvdykKICAgICAgICAgbV9jbGllbnQtPnN0
b3BVcGRhdGluZygpOwogfQogCi12b2lkIERldmljZUNvbnRyb2xsZXI6OmRpc3BhdGNoRGV2aWNl
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCit2b2lkIERldmljZUNvbnRyb2xsZXI6
OmRpc3BhdGNoRGV2aWNlRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxFdmVudD4g
ZXZlbnQgPSBwcnBFdmVudDsKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4+IGxpc3RlbmVy
VmVjdG9yOwogICAgIGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycywgbGlzdGVuZXJWZWN0b3IpOwog
ICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBsaXN0ZW5lclZlY3RvcikgewpAQCAtOTMsOCArOTIs
MTAgQEAgdm9pZCBEZXZpY2VDb250cm9sbGVyOjpmaXJlRGV2aWNlRXZlbnQoKQogICAgIG1fbGFz
dEV2ZW50TGlzdGVuZXJzLmNsZWFyKCk7CiAgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IGxpc3Rl
bmVyVmVjdG9yKSB7CiAgICAgICAgIGF1dG8gZG9jdW1lbnQgPSBsaXN0ZW5lci0+ZG9jdW1lbnQo
KTsKLSAgICAgICAgaWYgKGRvY3VtZW50ICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0Fy
ZVN1c3BlbmRlZCgpICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkK
LSAgICAgICAgICAgIGxpc3RlbmVyLT5kaXNwYXRjaEV2ZW50KGdldExhc3RFdmVudCgpKTsKKyAg
ICAgICAgaWYgKGRvY3VtZW50ICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3Bl
bmRlZCgpICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8gbGFzdEV2ZW50ID0gZ2V0TGFzdEV2ZW50KCkpCisgICAgICAgICAg
ICAgICAgbGlzdGVuZXItPmRpc3BhdGNoRXZlbnQoKmxhc3RFdmVudCk7CisgICAgICAgIH0KICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmgKaW5kZXggZmRmNWQx
ZDk2ZDE1Nzc2NzZjYTkwOWY5MTg5M2M1N2Y5ODA4YTVjZi4uMjE4NjFmMjRlNWU0MzhlNzAwMmQ3
OWYxMjNlNjhiY2I5YmEwODg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZp
Y2VDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVy
LmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVEZXZpY2VFdmVu
dExpc3RlbmVyKERPTVdpbmRvdyopOwogICAgIHZvaWQgcmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0
ZW5lcnMoRE9NV2luZG93Kik7CiAKLSAgICB2b2lkIGRpc3BhdGNoRGV2aWNlRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pOworICAgIHZvaWQgZGlzcGF0Y2hEZXZpY2VFdmVudChFdmVudCYpOwogICAg
IGJvb2wgaXNBY3RpdmUoKSB7IHJldHVybiAhbV9saXN0ZW5lcnMuaXNFbXB0eSgpOyB9CiAgICAg
RGV2aWNlQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgdmlydHVh
bCBib29sIGhhc0xhc3REYXRhKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFJl
ZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBmaXJlRGV2aWNlRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAKaW5kZXggMDUwYjYyODk1YWVhNzM2NDlkMmFlNDY0ZTU5ZmM2ODNmMWE2Yjlk
MC4uZGFhMGY5OGY5YzBhMjU2NmUxMDg5ZTUwZDlkZDU2MGI4ZWRmNzdkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBib29sIERyYWdD
b250cm9sbGVyOjpkaXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9yKEZyYW1lKiBpbm5lckZyYW1lLCBE
cmFnRGF0YSYgZHJhZwogICAgIEFTU0VSVChtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmhh
c0NhcmV0KCkpOwogICAgIFN0cmluZyB0ZXh0ID0gbV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIo
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpID8gZW1wdHlTdHJpbmcoKSA6IGRyYWdEYXRhLmFz
UGxhaW5UZXh0KCk7CiAgICAgTm9kZSogdGFyZ2V0ID0gaW5uZXJGcmFtZS0+ZWRpdG9yKCkuZmlu
ZEV2ZW50VGFyZ2V0RnJvbShtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmNhcmV0UG9zaXRp
b24oKSk7Ci0gICAgcmV0dXJuIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0
ZUZvckRyb3AoaW5uZXJGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHRleHQpLCBJR05P
UkVfRVhDRVBUSU9OKTsKKyAgICByZXR1cm4gdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVu
dDo6Y3JlYXRlRm9yRHJvcChpbm5lckZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4
dCkpOwogfQogCiBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRh
JiBkcmFnRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2NzBlMTM1
ZjNkMzRmZDMzNjZkMzg4YTZlOTAwNmM3NWMxZWQ0ZmEzLi5iZjhmYmE3NTYxMGJjYzE1M2YzNjBi
MmJjY2VjODcyYWNlMTYyNDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBA
IC0zMDEyLDEzICszMDEyLDEzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkKICAgICBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQga2V5RG93bkV2ZW50ID0gaW5pdGlhbEtleUV2ZW50OyAgICAKICAgICBpZiAoa2V5
RG93bkV2ZW50LnR5cGUoKSAhPSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICBr
ZXlEb3duRXZlbnQuZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFBsYXRmb3JtRXZlbnQ6OlJhd0tl
eURvd24sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpOwotICAgIFJlZlB0cjxLZXlib2FyZEV2
ZW50PiBrZXlkb3duID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleURvd25FdmVudCwgbV9mcmFt
ZS5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpKTsKKyAgICBSZWY8S2V5Ym9hcmRFdmVudD4ga2V5
ZG93biA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShrZXlEb3duRXZlbnQsIG1fZnJhbWUuZG9jdW1l
bnQoKS0+ZGVmYXVsdFZpZXcoKSk7CiAgICAgaWYgKG1hdGNoZWRBbkFjY2Vzc0tleSkKICAgICAg
ICAga2V5ZG93bi0+c2V0RGVmYXVsdFByZXZlbnRlZCh0cnVlKTsKICAgICBrZXlkb3duLT5zZXRU
YXJnZXQoZWxlbWVudCk7CiAKICAgICBpZiAoaW5pdGlhbEtleUV2ZW50LnR5cGUoKSA9PSBQbGF0
Zm9ybUV2ZW50OjpSYXdLZXlEb3duKSB7Ci0gICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQo
a2V5ZG93biwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZl
bnQoa2V5ZG93bik7CiAgICAgICAgIC8vIElmIGZyYW1lIGNoYW5nZWQgYXMgYSByZXN1bHQgb2Yg
a2V5ZG93biBkaXNwYXRjaCwgdGhlbiByZXR1cm4gdHJ1ZSB0byBhdm9pZCBzZW5kaW5nIGEgc3Vi
c2VxdWVudCBrZXlwcmVzcyBtZXNzYWdlIHRvIHRoZSBuZXcgZnJhbWUuCiAgICAgICAgIGJvb2wg
Y2hhbmdlZEZvY3VzZWRGcmFtZSA9IG1fZnJhbWUucGFnZSgpICYmICZtX2ZyYW1lICE9ICZtX2Zy
YW1lLnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAg
ICAgIHJldHVybiBrZXlkb3duLT5kZWZhdWx0SGFuZGxlZCgpIHx8IGtleWRvd24tPmRlZmF1bHRQ
cmV2ZW50ZWQoKSB8fCBjaGFuZ2VkRm9jdXNlZEZyYW1lOwpAQCAtMzAyOSw3ICszMDI5LDcgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYg
aW5pdGlhbEtleUV2ZW50KQogICAgIC8vIGluIG9yZGVyIHRvIG1hdGNoIElFOgogICAgIC8vIDEu
IHByZXZlbnRpbmcgZGVmYXVsdCBoYW5kbGluZyBvZiBrZXlkb3duIGFuZCBrZXlwcmVzcyBldmVu
dHMgaGFzIG5vIGVmZmVjdCBvbiBJTSBpbnB1dDsKICAgICAvLyAyLiBpZiBhbiBpbnB1dCBtZXRo
b2QgaGFuZGxlcyB0aGUgZXZlbnQsIGl0cyBrZXlDb2RlIGlzIHNldCB0byAyMjkgaW4ga2V5ZG93
biBldmVudC4KLSAgICBtX2ZyYW1lLmVkaXRvcigpLmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihr
ZXlkb3duLmdldCgpKTsKKyAgICBtX2ZyYW1lLmVkaXRvcigpLmhhbmRsZUlucHV0TWV0aG9kS2V5
ZG93bihrZXlkb3duLnB0cigpKTsKICAgICAKICAgICBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9k
ID0ga2V5ZG93bi0+ZGVmYXVsdEhhbmRsZWQoKTsKICAgICAKQEAgLTMwNDAsMTAgKzMwNDAsMTAg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCYgaW5pdGlhbEtleUV2ZW50KQogICAgICAgICBrZXlkb3duLT5zZXREZWZhdWx0SGFuZGxlZCgp
OwogICAgIH0KICAgICAKLSAgICBpZiAoYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dh
dGlvbihrZXlkb3duLmdldCgpKSkKKyAgICBpZiAoYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQ
cm9wb2dhdGlvbihrZXlkb3duKSkKICAgICAgICAga2V5ZG93bi0+c3RvcFByb3BhZ2F0aW9uKCk7
CiAKLSAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGtleWRvd24sIElHTk9SRV9FWENFUFRJT04p
OworICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93bik7CiAgICAgLy8gSWYgZnJhbWUg
Y2hhbmdlZCBhcyBhIHJlc3VsdCBvZiBrZXlkb3duIGRpc3BhdGNoLCB0aGVuIHJldHVybiBlYXJs
eSB0byBhdm9pZCBzZW5kaW5nIGEgc3Vic2VxdWVudCBrZXlwcmVzcyBtZXNzYWdlIHRvIHRoZSBu
ZXcgZnJhbWUuCiAgICAgYm9vbCBjaGFuZ2VkRm9jdXNlZEZyYW1lID0gbV9mcmFtZS5wYWdlKCkg
JiYgJm1fZnJhbWUgIT0gJm1fZnJhbWUucGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2Vk
T3JNYWluRnJhbWUoKTsKICAgICBib29sIGtleWRvd25SZXN1bHQgPSBrZXlkb3duLT5kZWZhdWx0
SGFuZGxlZCgpIHx8IGtleWRvd24tPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBjaGFuZ2VkRm9jdXNl
ZEZyYW1lOwpAQCAtMzA2MiwxNCArMzA2MiwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6a2V5RXZl
bnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbml0aWFsS2V5RXZlbnQpCiAgICAga2V5
UHJlc3NFdmVudC5kaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1FdmVudDo6Q2hhciwg
YmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSk7CiAgICAgaWYgKGtleVByZXNzRXZlbnQudGV4dCgp
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGtleWRvd25SZXN1bHQ7Ci0gICAgUmVmUHRyPEtl
eWJvYXJkRXZlbnQ+IGtleXByZXNzID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleVByZXNzRXZl
bnQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7CisgICAgUmVmPEtleWJvYXJk
RXZlbnQ+IGtleXByZXNzID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleVByZXNzRXZlbnQsIG1f
ZnJhbWUuZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7CiAgICAga2V5cHJlc3MtPnNldFRhcmdl
dChlbGVtZW50KTsKICAgICBpZiAoa2V5ZG93blJlc3VsdCkKICAgICAgICAga2V5cHJlc3MtPnNl
dERlZmF1bHRQcmV2ZW50ZWQodHJ1ZSk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAga2V5cHJl
c3MtPmtleXByZXNzQ29tbWFuZHMoKSA9IGtleWRvd24tPmtleXByZXNzQ29tbWFuZHMoKTsKICNl
bmRpZgotICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5cHJlc3MsIElHTk9SRV9FWENFUFRJ
T04pOworICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5cHJlc3MpOwogCiAgICAgcmV0dXJu
IGtleWRvd25SZXN1bHQgfHwga2V5cHJlc3MtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBrZXlwcmVz
cy0+ZGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAgLTMxODYsNyArMzE4Niw3IEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjpoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50Rm9yQWNjZXNzaWJpbGl0eShL
ZXlib2FyZEV2ZW50CiAgICAgfQogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6YWNjZXNzaWJpbGl0
eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50KiBldmVudCkKK2Jvb2wgRXZl
bnRIYW5kbGVyOjphY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKEtleWJvYXJk
RXZlbnQmIGV2ZW50KQogewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICghQVhPYmplY3RD
YWNoZTo6YWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQoKSkKQEAgLTMx
OTYsOSArMzE5Niw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjphY2Nlc3NpYmlsaXR5UHJldmVudHNF
dmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBDaGVjayBmb3Iga2V5IGV2ZW50cyB0aGF0IGFyZSByZWxldmFudCB0byBh
Y2Nlc3NpYmlsaXR5OiB0YWIgYW5kIGFycm93cyBrZXlzIHRoYXQgY2hhbmdlIGZvY3VzCi0gICAg
aWYgKGV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwOSIpCisgICAgaWYgKGV2ZW50Lmtl
eUlkZW50aWZpZXIoKSA9PSAiVSswMDA5IikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gZm9jdXNEaXJlY3Rpb25Gb3JLZXkoZXZlbnQtPmtleUlk
ZW50aWZpZXIoKSk7CisgICAgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gZm9jdXNEaXJlY3Rp
b25Gb3JLZXkoZXZlbnQua2V5SWRlbnRpZmllcigpKTsKICAgICBpZiAoZGlyZWN0aW9uICE9IEZv
Y3VzRGlyZWN0aW9uTm9uZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQpAQCAtMzQ5NCwx
MCArMzQ5NCwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4dElucHV0RXZlbnQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdW5kZXJseWluZ0V2ZQogICAgIGlmIChGcmFtZVZpZXcq
IHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKICAgICAgICAgdmlldy0+ZGlzYWJsZUxheWVyRmx1c2hU
aHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigpOwogCi0gICAgUmVmUHRyPFRleHRF
dmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdp
bmRvdygpLCB0ZXh0LCBpbnB1dFR5cGUpOworICAgIFJlZjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4
dEV2ZW50OjpjcmVhdGUobV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgaW5w
dXRUeXBlKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdFdmVudCk7
CiAKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT5kZWZh
dWx0SGFuZGxlZCgpOwogfQogICAgIApAQCAtMzg5OSwxMSArMzg5OSwxMSBAQCBib29sIEV2ZW50
SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50
KQogICAgICAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4gdGFyZ2V0VG91Y2hlcyhpc1RvdWNoQ2Fu
Y2VsRXZlbnQgPyBlbXB0eUxpc3QgOiB0b3VjaGVzQnlUYXJnZXQuZ2V0KHRvdWNoRXZlbnRUYXJn
ZXQpKTsKICAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRUb3VjaGVzKTsKIAotICAgICAgICAgICAg
UmVmUHRyPFRvdWNoRXZlbnQ+IHRvdWNoRXZlbnQgPQorICAgICAgICAgICAgUmVmPFRvdWNoRXZl
bnQ+IHRvdWNoRXZlbnQgPQogICAgICAgICAgICAgICAgIFRvdWNoRXZlbnQ6OmNyZWF0ZShlZmZl
Y3RpdmVUb3VjaGVzLmdldCgpLCB0YXJnZXRUb3VjaGVzLmdldCgpLCBjaGFuZ2VkVG91Y2hlc1tz
dGF0ZV0ubV90b3VjaGVzLmdldCgpLAogICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWUsIHRv
dWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksCiAgICAg
ICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5
KCksIGV2ZW50LnNoaWZ0S2V5KCksIGV2ZW50Lm1ldGFLZXkoKSk7Ci0gICAgICAgICAgICB0b3Vj
aEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZGlzcGF0Y2hUb3VjaEV2ZW50KHRvdWNoRXZlbnQuZ2V0
KCkpOworICAgICAgICAgICAgdG91Y2hFdmVudFRhcmdldC0+dG9Ob2RlKCktPmRpc3BhdGNoVG91
Y2hFdmVudCh0b3VjaEV2ZW50KTsKICAgICAgICAgICAgIHN3YWxsb3dlZEV2ZW50ID0gc3dhbGxv
d2VkRXZlbnQgfHwgdG91Y2hFdmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IHRvdWNoRXZlbnQt
PmRlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuaAppbmRleCAzZDU3NTg4NGE5YmE4NjA3YTc5YTdmZDQ3Yzc2ZDE3NDMyM2I5Mzg3Li4y
NDM1ZGEwMTUxMTgzYWU2ZDNmYWE5OWRlNDk3NjcxNTczYTkzYzlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBrZXlFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmKTsKICAgICB2
b2lkIGRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Kik7CiAKLSAgICBi
b29sIGFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVudCop
OworICAgIGJvb2wgYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihLZXlib2Fy
ZEV2ZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVLZXlib2FyZFNlbGVjdGlv
bk1vdmVtZW50Rm9yQWNjZXNzaWJpbGl0eShLZXlib2FyZEV2ZW50Kik7CiAKICAgICBib29sIGhh
bmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdF
dmVudCA9IG51bGxwdHIsIFRleHRFdmVudElucHV0VHlwZSA9IFRleHRFdmVudElucHV0S2V5Ym9h
cmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAppbmRleCA5ZjkwYjAxYjE1ODU0MDhm
NjYwZDdiMWQwMGVjOTZmYzgxMmZhZGI3Li40YTEwMTUxMmQ2ODY2Mzg4NjAwZWQ3MzJmYzNjYTg0
MTZmN2E0MGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcApAQCAtNDEwLDExICs0
MTAsMTEgQEAgYm9vbCBFdmVudFNvdXJjZTo6Y2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gRXZlbnRT
b3VyY2U6OmNyZWF0ZU1lc3NhZ2VFdmVudCgpCitSZWY8TWVzc2FnZUV2ZW50PiBFdmVudFNvdXJj
ZTo6Y3JlYXRlTWVzc2FnZUV2ZW50KCkKIHsKLSAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVu
dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKCk7CisgICAgUmVmPE1lc3NhZ2VFdmVudD4gZXZlbnQg
PSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOwogICAgIGV2ZW50LT5pbml0TWVzc2FnZUV2ZW50KG1f
ZXZlbnROYW1lLmlzRW1wdHkoKSA/IGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQgOiBBdG9taWNT
dHJpbmcobV9ldmVudE5hbWUpLCBmYWxzZSwgZmFsc2UsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKFN0cmluZzo6YWRvcHQobV9kYXRhKSksIG1fZXZlbnRTdHJlYW1PcmlnaW4sIG1fbGFz
dEV2ZW50SWQsIDAsIDApOwotICAgIHJldHVybiBldmVudC5yZWxlYXNlKCk7CisgICAgcmV0dXJu
IGV2ZW50OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291
cmNlLmgKaW5kZXggZTQ5ZDY4ZTIzN2ZiOTllNjEwZTZkNmM3ZTM2YWM5ZDNhNGMyOGM2Yy4uMWQy
NTQ1OGVlM2QwYmZhZGIxMjNiMDFiZjZmOWZlZGUwMjQzZGU1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRTb3VyY2UuaApAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWJvcnRDb25u
ZWN0aW9uQXR0ZW1wdCgpOwogICAgIHZvaWQgcGFyc2VFdmVudFN0cmVhbSgpOwogICAgIHZvaWQg
cGFyc2VFdmVudFN0cmVhbUxpbmUodW5zaWduZWQgcG9zLCBpbnQgZmllbGRMZW5ndGgsIGludCBs
aW5lTGVuZ3RoKTsKLSAgICBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gY3JlYXRlTWVzc2FnZUV2
ZW50KCk7CisgICAgUmVmPE1lc3NhZ2VFdmVudD4gY3JlYXRlTWVzc2FnZUV2ZW50KCk7CiAKICAg
ICBVUkwgbV91cmw7CiAgICAgYm9vbCBtX3dpdGhDcmVkZW50aWFsczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAppbmRleCAxZTdmZWQ3MDE3YWEyYjlkMjAxY2FkMDAxNzFjOTA2ODVjNTNkYzg0
Li4zMWFjMzFlMDJlYTIyNTlmOGUyODY3ZGE3Y2Y3NWRlN2YxNDNkOGU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCkBAIC0zMTg0LDE0ICszMTg0LDE0IEBAIHZvaWQgRnJhbWVWaWV3Ojpz
ZW5kUmVzaXplRXZlbnRJZk5lZWRlZCgpCiAgICAgYm9vbCBpc01haW5GcmFtZSA9IGZyYW1lKCku
aXNNYWluRnJhbWUoKTsKICAgICBib29sIGNhblNlbmRSZXNpemVFdmVudFN5bmNocm9ub3VzbHkg
PSBpc01haW5GcmFtZSAmJiAhbV9zaG91bGRBdXRvU2l6ZTsKIAotICAgIFJlZlB0cjxFdmVudD4g
cmVzaXplRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgZmFs
c2UsIGZhbHNlKTsKKyAgICBSZWY8RXZlbnQ+IHJlc2l6ZUV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkucmVzaXplRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGNhblNlbmRS
ZXNpemVFdmVudFN5bmNocm9ub3VzbHkpCi0gICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+ZGlz
cGF0Y2hXaW5kb3dFdmVudChyZXNpemVFdmVudC5yZWxlYXNlKCkpOworICAgICAgICBmcmFtZSgp
LmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQocmVzaXplRXZlbnQpOwogICAgIGVsc2Ug
ewogICAgICAgICAvLyBGSVhNRTogUXVldWVpbmcgdGhpcyBldmVudCBmb3IgYW4gdW5wcmVkaWN0
YWJsZSB0aW1lIGluIHRoZSBmdXR1cmUgc2VlbXMKICAgICAgICAgLy8gaW50cmluc2ljYWxseSBy
YWN5LiBCeSB0aGUgdGltZSB0aGlzIHJlc2l6ZSBldmVudCBmaXJlcywgdGhlIGZyYW1lIG1pZ2h0
CiAgICAgICAgIC8vIGJlIHJlc2l6ZWQgYWdhaW4sIHNvIHdlIGNvdWxkIGVuZCB1cCB3aXRoIHR3
byByZXNpemUgZXZlbnRzIGZvciB0aGUgc2FtZSBzaXplLgotICAgICAgICBmcmFtZSgpLmRvY3Vt
ZW50KCktPmVucXVldWVXaW5kb3dFdmVudChyZXNpemVFdmVudC5yZWxlYXNlKCkpOworICAgICAg
ICBmcmFtZSgpLmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVudChXVEY6Om1vdmUocmVzaXpl
RXZlbnQpKTsKICAgICB9CiAKICAgICBpZiAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNG
cm9udGVuZHMoKSAmJiBpc01haW5GcmFtZSkgewpAQCAtMzM3NywxMSArMzM3NywxMSBAQCB2b2lk
IEZyYW1lVmlldzo6dXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3cs
IGJvb2wgdmVydGljYWxPdmVyZgogICAgICAgICBtX2hvcml6b250YWxPdmVyZmxvdyA9IGhvcml6
b250YWxPdmVyZmxvdzsKICAgICAgICAgbV92ZXJ0aWNhbE92ZXJmbG93ID0gdmVydGljYWxPdmVy
ZmxvdzsKIAotICAgICAgICBSZWZQdHI8T3ZlcmZsb3dFdmVudD4gb3ZlcmZsb3dFdmVudCA9IE92
ZXJmbG93RXZlbnQ6OmNyZWF0ZShob3Jpem9udGFsT3ZlcmZsb3dDaGFuZ2VkLCBob3Jpem9udGFs
T3ZlcmZsb3csCisgICAgICAgIFJlZjxPdmVyZmxvd0V2ZW50PiBvdmVyZmxvd0V2ZW50ID0gT3Zl
cmZsb3dFdmVudDo6Y3JlYXRlKGhvcml6b250YWxPdmVyZmxvd0NoYW5nZWQsIGhvcml6b250YWxP
dmVyZmxvdywKICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmZsb3dDaGFuZ2VkLCB2ZXJ0aWNhbE92
ZXJmbG93KTsKICAgICAgICAgb3ZlcmZsb3dFdmVudC0+c2V0VGFyZ2V0KHZpZXdwb3J0UmVuZGVy
ZXItPmVsZW1lbnQoKSk7CiAKLSAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1ZXVlT3Zl
cmZsb3dFdmVudChvdmVyZmxvd0V2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGZyYW1lKCkuZG9j
dW1lbnQoKS0+ZW5xdWV1ZU92ZXJmbG93RXZlbnQoV1RGOjptb3ZlKG92ZXJmbG93RXZlbnQpKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4
IDkzYzcwNmMwNzA0NWJiNmJiOWU1NGM4OTVjNjVkMDM2OTYxZjVkZDYuLmM2MWNjOGI2N2QzMmVi
M2YyNDZjYmY1ZjEwY2E5Yzk3NmZmOGQ3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcApAQCAtMTY5LDkgKzE2OSw5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFo
b3Jpem9udGFsTGF5b3V0T3ZlcmZsb3dDaGFuZ2VkICYmICF2ZXJ0aWNhbExheW91dE92ZXJmbG93
Q2hhbmdlZCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQdHI8T3ZlcmZsb3dF
dmVudD4gb3ZlcmZsb3dFdmVudCA9IE92ZXJmbG93RXZlbnQ6OmNyZWF0ZShob3Jpem9udGFsTGF5
b3V0T3ZlcmZsb3dDaGFuZ2VkLCBoYXNIb3Jpem9udGFsTGF5b3V0T3ZlcmZsb3csIHZlcnRpY2Fs
TGF5b3V0T3ZlcmZsb3dDaGFuZ2VkLCBoYXNWZXJ0aWNhbExheW91dE92ZXJmbG93KTsKKyAgICAg
ICAgUmVmPE92ZXJmbG93RXZlbnQ+IG92ZXJmbG93RXZlbnQgPSBPdmVyZmxvd0V2ZW50OjpjcmVh
dGUoaG9yaXpvbnRhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzSG9yaXpvbnRhbExheW91dE92
ZXJmbG93LCB2ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzVmVydGljYWxMYXlvdXRP
dmVyZmxvdyk7CiAgICAgICAgIG92ZXJmbG93RXZlbnQtPnNldFRhcmdldChtX2Jsb2NrLT5lbGVt
ZW50KCkpOwotICAgICAgICBtX2Jsb2NrLT5kb2N1bWVudCgpLmVucXVldWVPdmVyZmxvd0V2ZW50
KG92ZXJmbG93RXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgbV9ibG9jay0+ZG9jdW1lbnQoKS5l
bnF1ZXVlT3ZlcmZsb3dFdmVudChXVEY6Om1vdmUob3ZlcmZsb3dFdmVudCkpOwogICAgIH0KIAog
cHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRR
dWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCmlu
ZGV4IDA3MjEwNzY5ZmQwNmJhOWNlODdhYzQ2NTJjOTllMmMxNzhkMjg0ZjEuLjdlYjU4YTI2YTQ4
ZmY3MGVmZjllNWY1NTNkNTZlNDA4ZmIxZjIyYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAtNDksOCArNDksOCBAQCBXb3JrZXJFdmVudFF1ZXVl
Ojp+V29ya2VyRXZlbnRRdWV1ZSgpCiBjbGFzcyBXb3JrZXJFdmVudFF1ZXVlOjpFdmVudERpc3Bh
dGNoZXIKIHsKIHB1YmxpYzoKLSAgICBFdmVudERpc3BhdGNoZXIoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQsIFdvcmtlckV2ZW50UXVldWUmIGV2ZW50UXVldWUpCi0gICAgICAgIDogbV9ldmVudChl
dmVudCkKKyAgICBFdmVudERpc3BhdGNoZXIoUmVmUHRyPEV2ZW50PiYmIGV2ZW50LCBXb3JrZXJF
dmVudFF1ZXVlJiBldmVudFF1ZXVlKQorICAgICAgICA6IG1fZXZlbnQoV1RGOjptb3ZlKGV2ZW50
KSkKICAgICAgICAgLCBtX2V2ZW50UXVldWUoZXZlbnRRdWV1ZSkKICAgICAgICAgLCBtX2lzQ2Fu
Y2VsbGVkKGZhbHNlKQogICAgIHsKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgICAgICBp
ZiAobV9pc0NhbmNlbGxlZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9ldmVudFF1
ZXVlLm1fZXZlbnREaXNwYXRjaGVyTWFwLnJlbW92ZShtX2V2ZW50LmdldCgpKTsKLSAgICAgICAg
bV9ldmVudC0+dGFyZ2V0KCktPmRpc3BhdGNoRXZlbnQobV9ldmVudCk7CisgICAgICAgIG1fZXZl
bnQtPnRhcmdldCgpLT5kaXNwYXRjaEV2ZW50KCptX2V2ZW50KTsKICAgICAgICAgbV9ldmVudCA9
IG51bGxwdHI7CiAgICAgfQogCkBAIC04MywxMyArODMsMTMgQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNDYW5jZWxsZWQ7CiB9OwogCi1ib29sIFdvcmtlckV2ZW50UXVldWU6OmVucXVldWVFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgV29ya2VyRXZlbnRRdWV1ZTo6ZW5xdWV1
ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBpZiAobV9pc0Nsb3NlZCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRXZlbnREaXNwYXRjaGVyKiBldmVudERpc3BhdGNoZXJQ
dHIgPSBuZXcgRXZlbnREaXNwYXRjaGVyKGV2ZW50LmdldCgpLCAqdGhpcyk7Ci0gICAgbV9ldmVu
dERpc3BhdGNoZXJNYXAuYWRkKGV2ZW50LCBldmVudERpc3BhdGNoZXJQdHIpOworICAgIEV2ZW50
RGlzcGF0Y2hlciogZXZlbnREaXNwYXRjaGVyUHRyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcihldmVu
dC5jb3B5UmVmKCksICp0aGlzKTsKKyAgICBtX2V2ZW50RGlzcGF0Y2hlck1hcC5hZGQoZXZlbnQu
cHRyKCksIGV2ZW50RGlzcGF0Y2hlclB0cik7CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LnBvc3RUYXNrKFtldmVudERpc3BhdGNoZXJQdHJdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikg
ewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnREaXNwYXRjaGVyPiBldmVudERpc3BhdGNo
ZXIoZXZlbnREaXNwYXRjaGVyUHRyKTsKICAgICAgICAgZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRj
aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVl
LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuaAppbmRleCA5YTA1
NzU2ODExOTI5MjMwYjRiZWU1NzgwZGVjODQxOWQ1NWEyNDdlLi4zZGJmMzNkYjM4YjdjNzkzMzE4
ZGJiZjFlNDg0OTRmMDQyNmVjYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckV2ZW50UXVldWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2
ZW50UXVldWUuaApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgV29ya2Vy
RXZlbnRRdWV1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAgICAgdmlydHVhbCB+V29ya2Vy
RXZlbnRRdWV1ZSgpOwogCi0gICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChQYXNzUmVmUHRy
PEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChSZWY8RXZl
bnQ+JiYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBjYW5jZWxFdmVudChFdmVudCYpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90
dGxlLmNwcAppbmRleCBhYjE3MDhmZTQ0MjVkMDFmNjUxNTgzOTMzNTQ3ZDljOWM3ZGI2ZTFkLi5j
M2UxNTM4YjQyNmNlMzU2NThjMDhiMzEyZDhmYzkxOTA1OTkwYTRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRs
ZS5jcHAKQEAgLTgxLDI1ICs4MSwyNCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlOjpkaXNwYXRjaFRocm90dGxlZFByb2dyZXNzRXZlbnQoYm9vbCBsZQogICAgIG1f
aGFzVGhyb3R0bGVkUHJvZ3Jlc3NFdmVudCA9IHRydWU7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KFJl
ZlB0cjxFdmVudD4mJiBldmVudCwgUHJvZ3Jlc3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2ZW50QWN0
aW9uKQordm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hS
ZWFkeVN0YXRlQ2hhbmdlRXZlbnQoRXZlbnQmIGV2ZW50LCBQcm9ncmVzc0V2ZW50QWN0aW9uIHBy
b2dyZXNzRXZlbnRBY3Rpb24pCiB7CiAgICAgaWYgKHByb2dyZXNzRXZlbnRBY3Rpb24gPT0gRmx1
c2hQcm9ncmVzc0V2ZW50KQogICAgICAgICBmbHVzaFByb2dyZXNzRXZlbnQoKTsKIAotICAgIGRp
c3BhdGNoRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CisgICAgZGlzcGF0Y2hFdmVudChldmVudCk7
CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNo
RXZlbnQoUmVmUHRyPEV2ZW50PiYmIGV2ZW50KQordm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJU
KGV2ZW50KTsKICAgICBpZiAobV9kZWZlckV2ZW50cykgewotICAgICAgICBpZiAobV9kZWZlcnJl
ZEV2ZW50cy5zaXplKCkgPiAxICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnJlYWR5
c3RhdGVjaGFuZ2VFdmVudCAmJiBldmVudC0+dHlwZSgpID09IG1fZGVmZXJyZWRFdmVudHMubGFz
dCgpLT50eXBlKCkpIHsKKyAgICAgICAgaWYgKG1fZGVmZXJyZWRFdmVudHMuc2l6ZSgpID4gMSAm
JiBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCAmJiBl
dmVudC50eXBlKCkgPT0gbV9kZWZlcnJlZEV2ZW50cy5sYXN0KCktPnR5cGUoKSkgewogICAgICAg
ICAgICAgLy8gUmVhZHlzdGF0ZWNoYW5nZSBldmVudHMgYXJlIHN0YXRlLWxlc3Mgc28gYXZvaWQg
cmVwZWF0aW5nIHR3byBpZGVudGljYWwgZXZlbnRzIGluIGEgcm93IG9uIHJlc3VtZS4KICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2RlZmVycmVkRXZlbnRzLmFwcGVu
ZChXVEY6Om1vdmUoZXZlbnQpKTsKKyAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQoZXZl
bnQpOwogICAgIH0gZWxzZQotICAgICAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChXVEY6Om1v
dmUoZXZlbnQpKTsKKyAgICAgICAgbV90YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQog
CiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dy
ZXNzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQpAQCAtMTIwLDggKzExOSw3IEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZsdXNoUHJvZ3Jlc3NFdmVu
dCgpCiB7CiAgICAgaWYgKG1fZGVmZXJFdmVudHMgJiYgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQp
IHsKICAgICAgICAgLy8gTW92ZSB0aGUgcHJvZ3Jlc3MgZXZlbnQgdG8gdGhlIHF1ZXVlLCB0byBn
ZXQgaXQgaW4gdGhlIHJpZ2h0IG9yZGVyIG9uIHJlc3VtZS4KLSAgICAgICAgbV9kZWZlcnJlZEV2
ZW50cy5hcHBlbmQobV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpOwotICAgICAgICBtX2RlZmVycmVk
UHJvZ3Jlc3NFdmVudCA9IG51bGxwdHI7CisgICAgICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5k
KG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xNDQsMTYgKzE0MiwxNSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaERlZmVycmVkRXZlbnRzKCkKICAgICAvLyBUYWtl
IG92ZXIgdGhlIGRlZmVycmVkIGV2ZW50cyBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlbSB3aGljaCBj
YW4gcG90ZW50aWFsbHkgYWRkIG1vcmUuCiAgICAgYXV0byBkZWZlcnJlZEV2ZW50cyA9IFdURjo6
bW92ZShtX2RlZmVycmVkRXZlbnRzKTsKIAotICAgIFJlZlB0cjxFdmVudD4gZGVmZXJyZWRQcm9n
cmVzc0V2ZW50ID0gbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQ7Ci0gICAgbV9kZWZlcnJlZFByb2dy
ZXNzRXZlbnQgPSBudWxscHRyOworICAgIFJlZlB0cjxFdmVudD4gZGVmZXJyZWRQcm9ncmVzc0V2
ZW50ID0gV1RGOjptb3ZlKG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50KTsKIAogICAgIGZvciAoYXV0
byYgZGVmZXJyZWRFdmVudCA6IGRlZmVycmVkRXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50
KGRlZmVycmVkRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChkZWZlcnJl
ZEV2ZW50KTsKIAogICAgIC8vIFRoZSBwcm9ncmVzcyBldmVudCB3aWxsIGJlIGluIHRoZSBtX2Rl
ZmVycmVkRXZlbnRzIHZlY3RvciBpZiB0aGUgbG9hZCB3YXMgZmluaXNoZWQgd2hpbGUgc3VzcGVu
ZGVkLgogICAgIC8vIElmIG5vdCwganVzdCBzZW5kIHRoZSBtb3N0IHVwLXRvLWRhdGUgcHJvZ3Jl
c3Mgb24gcmVzdW1lLgogICAgIGlmIChkZWZlcnJlZFByb2dyZXNzRXZlbnQpCi0gICAgICAgIGRp
c3BhdGNoRXZlbnQoV1RGOjptb3ZlKGRlZmVycmVkUHJvZ3Jlc3NFdmVudCkpOworICAgICAgICBk
aXNwYXRjaEV2ZW50KCpkZWZlcnJlZFByb2dyZXNzRXZlbnQpOwogfQogCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmaXJlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCmluZGV4
IDI5ZjRkNjU1ZDgzZDE2ZjYxNzBmZDU1ODc1NmQ1YTc2MTk1MDRmMDIuLmMxMDA5ZTUwZGI5MDhj
YTQzM2NlNDVkZjUzZmU1MDc0ZWZhNzc2MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCkBAIC00OSw3ICs0
OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZSgpOwogCiAgICAgdm9pZCBkaXNwYXRjaFRocm90dGxlZFByb2dyZXNzRXZlbnQoYm9v
bCBsZW5ndGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWwpOwotICAgIHZvaWQgZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQo
UmVmUHRyPEV2ZW50PiYmLCBQcm9ncmVzc0V2ZW50QWN0aW9uID0gRG9Ob3RGbHVzaFByb2dyZXNz
RXZlbnQpOworICAgIHZvaWQgZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoRXZlbnQmLCBQ
cm9ncmVzc0V2ZW50QWN0aW9uID0gRG9Ob3RGbHVzaFByb2dyZXNzRXZlbnQpOwogICAgIHZvaWQg
ZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgdm9pZCBz
dXNwZW5kKCk7CkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGZp
cmVkKCk7CiAgICAgdm9pZCBkaXNwYXRjaERlZmVycmVkRXZlbnRzKCk7CiAgICAgdm9pZCBmbHVz
aFByb2dyZXNzRXZlbnQoKTsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnQoUmVmUHRyPEV2ZW50PiYm
KTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKTsKIAogICAgIGJvb2wgaGFzRXZlbnRU
b0Rpc3BhdGNoKCkgY29uc3Q7CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9kZWZlckV2ZW50czsKICAgICBSZWZQdHI8RXZlbnQ+IG1fZGVmZXJyZWRQcm9ncmVzc0V2
ZW50OwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX2RlZmVycmVkRXZlbnRzOworICAgIFZl
Y3RvcjxSZWY8RXZlbnQ+PiBtX2RlZmVycmVkRXZlbnRzOwogICAgIFRpbWVyIG1fZGlzcGF0Y2hE
ZWZlcnJlZEV2ZW50c1RpbWVyOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265354</attachid>
            <date>2015-11-11 19:54:32 -0800</date>
            <delta_ts>2015-11-11 21:37:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151158-20151111195427.patch</filename>
            <type>text/plain</type>
            <size>117921</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IwZjM1OGI3ODBmMmMy
MDU2NzM0ODA4ZjBiOTExOTE0ODI4Nzk0Ni4uMDFlN2ZjNzBlYWFhODlhNWNkZDc1OWNlYjQ0NTRm
YjVkYzg3MDI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFz
c1JlZlB0ciB0byBkaXNwYXRjaEV2ZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFN0b3AgcGFzc2luZyBhIFBhc3NSZWZQdHIgdG8gZGlzcGF0Y2hF
dmVudCgpIGJlY2F1c2U6CisgICAgICAgIDEuIFBhc3NSZWZQdHIgaXMgbGVnYWN5IGFuZCBzaG91
bGQgbm8gbG9uZ2VyIGJlIHVzZWQKKyAgICAgICAgMi4gV2UgZG9uJ3QgYWN0dWFsbHkgdHJhbnNm
ZXIgb3duZXJzaGlwIG9mIHRoZSBFdmVudCB0byB0aGUgY2FsbGVlCisKKyAgICAgICAgUGFzcyBh
IEMrKyByZWZlcmVuY2UgaW5zdGVhZC4KKwogMjAxNS0xMS0xMSAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBoYW5kbGUuKkV2ZW50IHRvIGRpc3Bh
dGNoLipFdmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0
ZXJ5Q29udHJvbGxlci5jcHAKaW5kZXggY2Y4MmEzNTUyOWNlMzA4MDdkMTY5MDY5ZTVkN2FmY2I4
YTQxYmQ5ZS4uMjUyMTVjOTcwNDZjZTlmZTJiZmFiMWUwYjRkMDFkMTRhYjEzNWI4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIu
Y3BwCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQmF0dGVyeUNvbnRyb2xsZXI6OnVwZGF0ZUJhdHRl
cnlTdGF0dXMoUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhCiAKIHZvaWQgQmF0
dGVyeUNvbnRyb2xsZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4gYmF0dGVyeVN0YXR1cykKIHsK
LSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGZhbHNl
LCBmYWxzZSk7CisgICAgUmVmPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBl
LCBmYWxzZSwgZmFsc2UpOwogICAgIFJlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5ID0gYmF0
dGVyeVN0YXR1czsKICAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMpCiAgICAg
ICAgIGxpc3RlbmVyLT5kaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGV2ZW50LCBiYXR0ZXJ5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCmlu
ZGV4IDNjMWVhNzc0NTZmNGQyYTk2Nzc3ZTQ5ZGM2NTAxMTRhMjg2NjVmNjIuLmQ2ZDE4MGU4NTU2
MGFjZDNmN2M3OWNiNTU3NzRhODA0MTA3OWMyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcApAQCAtNzcsNyArNzcsNyBAQCBkb3Vi
bGUgQmF0dGVyeU1hbmFnZXI6OmxldmVsKCkKICAgICByZXR1cm4gbV9iYXR0ZXJ5U3RhdHVzID8g
bV9iYXR0ZXJ5U3RhdHVzLT5sZXZlbCgpIDogMTsKIH0KIAotdm9pZCBCYXR0ZXJ5TWFuYWdlcjo6
ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1JlZlB0
cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQordm9pZCBCYXR0ZXJ5TWFuYWdlcjo6ZGlk
Q2hhbmdlQmF0dGVyeVN0YXR1cyhFdmVudCYgZXZlbnQsIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1
cz4gYmF0dGVyeVN0YXR1cykKIHsKICAgICB1cGRhdGVCYXR0ZXJ5U3RhdHVzKGJhdHRlcnlTdGF0
dXMpOwogICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaAppbmRleCA3OWEwMWY5MzY5YjA2Mzk4OGY2YmMy
N2M2OTY4Yzc1NTRlOGNkZGFmLi5kNGUzZDI2MTVlMjYxMjA4NDcwNWFkNjJiNTFjYjUzMmEwOGMy
OTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1h
bmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFn
ZXIuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGRpc2NoYXJnaW5nVGlt
ZSgpOwogICAgIGRvdWJsZSBsZXZlbCgpOwogCi0gICAgdm9pZCBkaWRDaGFuZ2VCYXR0ZXJ5U3Rh
dHVzKFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+KTsKKyAgICB2
b2lkIGRpZENoYW5nZUJhdHRlcnlTdGF0dXMoRXZlbnQmLCBQYXNzUmVmUHRyPEJhdHRlcnlTdGF0
dXM+KTsKICAgICB2b2lkIHVwZGF0ZUJhdHRlcnlTdGF0dXMoUGFzc1JlZlB0cjxCYXR0ZXJ5U3Rh
dHVzPik7CiAgICAgdm9pZCBiYXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgpIHsgbV9iYXR0ZXJ5
Q29udHJvbGxlciA9IG51bGxwdHI7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggYjg4ZWRlNThkODFl
NDA2YzgwMmU1M2U4YTQxODc0OWJkMTMzN2E5OS4uZjgxZjM2NTgyZDdkYmZmNTI1ZThjZTg3Yjlm
MDU3MzgyNzFiNDgxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwCkBAIC0zNiwzMCArMzYsMzAgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goRXZl
bnQqIGV2ZW50LCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4mIGV2ZW50VGFyZ2V0cykKK2Jv
b2wgSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChFdmVudCYgZXZlbnQsIFZlY3RvcjxSZWZQ
dHI8RXZlbnRUYXJnZXQ+PiYgZXZlbnRUYXJnZXRzKQogewogICAgIHNpemVfdCBzaXplID0gZXZl
bnRUYXJnZXRzLnNpemUoKTsKICAgICBBU1NFUlQoc2l6ZSk7CiAKLSAgICBldmVudC0+c2V0RXZl
bnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKKyAgICBldmVudC5zZXRFdmVudFBoYXNl
KEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplIC0gMTsg
aTsgLS1pKSB7IC8vIERvbid0IGRvIHRoZSBmaXJzdCBlbGVtZW50LgotICAgICAgICBldmVudC0+
c2V0Q3VycmVudFRhcmdldChldmVudFRhcmdldHNbaV0uZ2V0KCkpOworICAgICAgICBldmVudC5z
ZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1tpXS5nZXQoKSk7CiAgICAgICAgIGV2ZW50VGFy
Z2V0c1tpXS0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKLSAgICAgICAgaWYgKGV2ZW50LT5w
cm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICAgICAgaWYgKGV2ZW50LnByb3BhZ2F0aW9uU3RvcHBl
ZCgpKQogICAgICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAgICAgfQogCi0gICAgZXZl
bnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7Ci0gICAgZXZlbnQtPnNldEN1cnJl
bnRUYXJnZXQoZXZlbnRUYXJnZXRzWzBdLmdldCgpKTsKKyAgICBldmVudC5zZXRFdmVudFBoYXNl
KEV2ZW50OjpBVF9UQVJHRVQpOworICAgIGV2ZW50LnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJn
ZXRzWzBdLmdldCgpKTsKICAgICBldmVudFRhcmdldHNbMF0tPmZpcmVFdmVudExpc3RlbmVycyhl
dmVudCk7Ci0gICAgaWYgKGV2ZW50LT5wcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAhZXZlbnQtPmJ1
YmJsZXMoKSB8fCBldmVudC0+Y2FuY2VsQnViYmxlKCkpCisgICAgaWYgKGV2ZW50LnByb3BhZ2F0
aW9uU3RvcHBlZCgpIHx8ICFldmVudC5idWJibGVzKCkgfHwgZXZlbnQuY2FuY2VsQnViYmxlKCkp
CiAgICAgICAgIGdvdG8gZG9uZURpc3BhdGNoaW5nOwogCi0gICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKKyAgICBldmVudC5zZXRFdmVudFBoYXNlKEV2ZW50
OjpCVUJCTElOR19QSEFTRSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kp
IHsgLy8gRG9uJ3QgZG8gdGhlIGZpcnN0IGVsZW1lbnQuCi0gICAgICAgIGV2ZW50LT5zZXRDdXJy
ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1tpXS5nZXQoKSk7CisgICAgICAgIGV2ZW50LnNldEN1cnJl
bnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKICAgICAgICAgZXZlbnRUYXJnZXRzW2ld
LT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwotICAgICAgICBpZiAoZXZlbnQtPnByb3BhZ2F0
aW9uU3RvcHBlZCgpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICAgICAgaWYgKGV2ZW50
LnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8IGV2ZW50LmNhbmNlbEJ1YmJsZSgpKQogICAgICAgICAg
ICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAgICAgfQogCkBAIC04Miw5ICs4Miw5IEBAIGJvb2wg
SURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChFdmVudCogZXZlbnQsIFZlY3RvcjxSZWZQdHI8
RXZlbnRUYXJnZXQ+PiYgZXZlCiAgICAgLy8gICAgICAgIGV2ZW50IG9uIHRoZSB3aW5kb3cgdW50
aWwgdGhhdCBoYXMgYmVlbiBpbXBsZW1lbnRlZCkuIiAtLSBKb25hcyBTaWNraW5nCiAKIGRvbmVE
aXNwYXRjaGluZzoKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKLSAgICBl
dmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVu
dGVkKCk7CisgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKKyAgICBldmVudC5z
ZXRFdmVudFBoYXNlKDApOworICAgIHJldHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCgpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oCmluZGV4IGE0NjM5M2VkODZjNGE2
MWU1Njk2NDVjOTZjOTFjNTUwODI2NGVmZmYuLmVkNTk1OTc1YWNiNjVhZDY3MmY1Mjg5OWFkMDJm
M2FmM2YzMzUwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkV2ZW50RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEV2ZW50VGFy
Z2V0OwogCiBjbGFzcyBJREJFdmVudERpc3BhdGNoZXIgewogcHVibGljOgotICAgIHN0YXRpYyBi
b29sIGRpc3BhdGNoKEV2ZW50KiwgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+Jik7IC8vIFRo
ZSB0YXJnZXQgZmlyc3QgYW5kIHRoZW4gaXRzIGFuY2VzdG9ycyBpbiBvcmRlciBvZiBob3cgdGhl
IGV2ZW50IGJ1YmJsZXMuCisgICAgc3RhdGljIGJvb2wgZGlzcGF0Y2goRXZlbnQmLCBWZWN0b3I8
UmVmUHRyPEV2ZW50VGFyZ2V0Pj4mKTsgLy8gVGhlIHRhcmdldCBmaXJzdCBhbmQgdGhlbiBpdHMg
YW5jZXN0b3JzIGluIG9yZGVyIG9mIGhvdyB0aGUgZXZlbnQgYnViYmxlcy4KIAogcHJpdmF0ZToK
ICAgICBJREJFdmVudERpc3BhdGNoZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5jcHAKaW5kZXggZGJl
MDAwZjU3MTRhZTI4OGYwNjM0ODIzZWM2MzVmZjE4NDRjODFiMy4uNjFiMTc3Yzg5ODhmZDc2M2Zl
ZDgyMjQxOGQxMzBmNjk5NTQyNzk0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5jcHAKQEAgLTMzMSw3
ICszMzEsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KHVpbnQ2
NF90IHJlcXVlc3RlZFZlcnNpb24pCiAgICAgCiAgICAgUmVmPEV2ZW50PiBldmVudCA9IElEQlZl
cnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKGN1cnJlbnRWZXJzaW9uLCByZXF1ZXN0ZWRWZXJzaW9u
LCBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50KTsKICAgICBldmVudC0+c2V0VGFyZ2V0
KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVl
dWVFdmVudChhZG9wdFJlZigmZXZlbnQubGVha1JlZigpKSk7CisgICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVudCkpOwog
fQogCiB2b2lkIElEQkRhdGFiYXNlOjpkaWRDcmVhdGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJ
bmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKaW5kZXggNzViOTY1ZDkwZDAxOWUwZjU2OGM0
M2M3ZmQ4Zjk1YzExYzllZWVlYy4uOThhZWFkNWU5ZDE1ZmExNmZhYTY3YWY4YjEzMjYxZmFjZTJm
OWZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQlJlcXVlc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwCkBAIC0xOTQsMTYgKzE5NCwxNCBAQCB2b2lkIElE
QlJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KCZldmVudC5nZXQoKSk7CisgICAgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURjo6bW92
ZShldmVudCkpOwogfQogCi1ib29sIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4gcHJwRXZlbnQpCitib29sIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoRXZlbnQm
IGV2ZW50KQogewotICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
IC0gJXMiLCBwcnBFdmVudC0+dHlwZSgpLmNoYXJhY3RlcnM4KCkpOworICAgIExPRyhJbmRleGVk
REIsICJJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50IC0gJXMiLCBldmVudC50eXBlKCkuY2hhcmFj
dGVyczgoKSk7CiAKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7Ci0KLSAgICBp
ZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQorICAgIGlmIChl
dmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKICAgICAgICAgbV9yZWFk
eVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7CiAKICAgICBWZWN0b3I8UmVmUHRy
PEV2ZW50VGFyZ2V0Pj4gdGFyZ2V0czsKQEAgLTIxNyw3ICsyMTUsNyBAQCBib29sIElEQlJlcXVl
c3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiAgICAgYm9vbCBk
b250UHJldmVudERlZmF1bHQ7CiAgICAgewogICAgICAgICBUcmFuc2FjdGlvbkFjdGl2YXRvciBh
Y3RpdmF0b3IobV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgICAgIGRvbnRQcmV2ZW50RGVmYXVs
dCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOwor
ICAgICAgICBkb250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
KGV2ZW50LCB0YXJnZXRzKTsKICAgICB9CiAKICAgICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IGZh
bHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQlJlcXVlc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuaAppbmRleCBhNDJiMTdiNDQzYzQxYzgzY2E4ZWY5ZDZlZDQwMjMz
OGY0MjY5MmM4Li4yOTBlMzljNWJkM2M5NmM2MThjNTk4ZmY4NDA4NDAwNTNmYzAzZjQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVz
dEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
UmVxdWVzdEltcGwuaApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291
bnRlZDxJREJSZXF1ZXN0Pjo6ZGVyZWY7CiAKICAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZl
bnQ+JiYpOwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYp
IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgSURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9u
KCkgeyByZXR1cm4gbV9jb25uZWN0aW9uOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAK
aW5kZXggMGRjMWM0ZjU4ZTQ2MjI5ZWMxN2I1MTViMDFiMzFkNjJiZTQ2YzA2MC4uNGE0NzE5NGMz
NDk5OTM5MGE3Yzk3YmFmNDIzYmU0ZTdhOWQxMGZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1w
bC5jcHAKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpmaXJlT25BYm9y
dCgpCiAgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZl
bnQsIHRydWUsIGZhbHNlKSk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246OmVucXVldWVFdmVu
dChSZWY8RXZlbnQ+IGV2ZW50KQordm9pZCBJREJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFJl
ZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBBU1NFUlQobV9zdGF0ZSAhPSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkKTsKIApAQCAtMzU0LDIyICszNTQsMjIgQEAgdm9pZCBJ
REJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4gZXZlbnQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KCZldmVudC5nZXQoKSk7CisgICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURjo6
bW92ZShldmVudCkpOwogfQogCi1ib29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVu
dChFdmVudCYgZXZlbnQpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpk
aXNwYXRjaEV2ZW50Iik7CiAKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
LSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpID09IHRoaXMpOwotICAgIEFTU0VSVChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOworICAgIEFTU0VSVChldmVudC50YXJnZXQoKSA9PSB0
aGlzKTsKKyAgICBBU1NFUlQoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2
ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CiAKICAgICBW
ZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gdGFyZ2V0czsKICAgICB0YXJnZXRzLmFwcGVuZCh0
aGlzKTsKICAgICB0YXJnZXRzLmFwcGVuZChkYigpKTsKIAotICAgIHJldHVybiBJREJFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKyAgICByZXR1cm4gSURC
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudCwgdGFyZ2V0cyk7CiB9CiAKIFJlZjxJREJP
YmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQk9i
amVjdFN0b3JlSW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAppbmRleCBiM2Q3YjNj
YzM2NmQ1OGFhN2E0NGExOGQzMmE3NzY5ZGI2ZTdkNTFjLi4wNDM2MTk1OTBjMjY3MTQxYTA3NzM1
ZDVjMWQ3YjE5MTAyNzY5MzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCkBAIC03MSw3ICs3
MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlk
ZSBmaW5hbCB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBv
dmVycmlkZSBmaW5hbCB7IGRlcmVmKCk7IH0KICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0
Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
Pikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQm
KSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogYWN0aXZlRE9NT2Jq
ZWN0TmFtZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNw
ZW5kRm9yUGFnZUNhY2hlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CkBAIC0xMjgsNyArMTI4LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmlyZU9uQ29tcGxldGUoKTsKICAgICB2b2lkIGZpcmVP
bkFib3J0KCk7Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50Pik7CisgICAgdm9pZCBl
bnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKIAogICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0
SW5kZXhSZWNvcmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4JiwgSW5kZXhlZERC
OjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFi
YXNlLmNwcAppbmRleCBiMDE0ZTY2MjFkMjBkMTEzYzFjNzE0YzMxYTcxZDk2ZjgzMWY4NDJkLi5k
MDNmMTI4Y2QzMTFlZDIyOWJkYzM0YzdjMDFlNWNlMGUxMWI2N2NjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFz
ZS5jcHAKQEAgLTkyLDcgKzkyLDcgQEAgTGVnYWN5RGF0YWJhc2U6On5MZWdhY3lEYXRhYmFzZSgp
CiAgICAgICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZlcnNpb24sIGJ1dCB0aGUgZnJvbnRl
bmQgY29ubmVjdGlvbiBpcyBiZWluZwogICAgICAgICAvLyBjbG9zZWQgYmVmb3JlIHRoZXkgY291
bGQgZmlyZS4KICAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpCi0g
ICAgICAgICAgICBjb250ZXh0LT5ldmVudFF1ZXVlKCkuY2FuY2VsRXZlbnQoKmV2ZW50KTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmV2ZW50UXVldWUoKS5jYW5jZWxFdmVudChldmVudCk7CiAgICAg
fQogfQogCkBAIC0zMjEsNyArMzIxLDcgQEAgdm9pZCBMZWdhY3lEYXRhYmFzZTo6Y2xvc2VDb25u
ZWN0aW9uKCkKICAgICAvLyBjb25uZWN0aW9uIGNhbGxlZCBzZXRWZXJzaW9uLCBidXQgdGhlIGZy
b250ZW5kIGNvbm5lY3Rpb24gaXMgYmVpbmcKICAgICAvLyBjbG9zZWQgYmVmb3JlIHRoZXkgY291
bGQgZmlyZS4KICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykgewotICAg
ICAgICBib29sIHJlbW92ZWQgPSBldmVudFF1ZXVlLmNhbmNlbEV2ZW50KCpldmVudCk7CisgICAg
ICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoZXZlbnQpOwogICAgICAg
ICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwogICAgIH0KIApAQCAtMzQxLDI1ICsz
NDEsMjUgQEAgdm9pZCBMZWdhY3lEYXRhYmFzZTo6b25WZXJzaW9uQ2hhbmdlKHVpbnQ2NF90IG9s
ZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pCiAgICAgZW5xdWV1ZUV2ZW50KExlZ2FjeVZl
cnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGV2ZW50TmFt
ZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKIH0KIAotdm9pZCBMZWdhY3lEYXRhYmFzZTo6ZW5x
dWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBMZWdhY3lEYXRhYmFzZTo6
ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBBU1NFUlQoIW1fY29udGV4
dFN0b3BwZWQpOwogICAgIEFTU0VSVCghbV9pc0Nsb3NlZCk7CiAgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoZXZlbnQuZ2V0
KCkpOwotICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKKyAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoZXZlbnQuY29weVJlZigp
KTsKKyAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVuZChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAot
Ym9vbCBMZWdhY3lEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKK2Jvb2wgTGVnYWN5RGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewog
ICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5RGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQiKTsKLSAg
ICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50
KTsKKyAgICBBU1NFUlQoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdl
RXZlbnQpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5nZXQoKSA9PSBldmVu
dC5nZXQoKSkKKyAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0ucHRyKCkgPT0gJmV2ZW50
KQogICAgICAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5yZW1vdmUoaSk7CiAgICAgfQotICAgIHJl
dHVybiBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7CisgICAgcmV0dXJu
IEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogaW50NjRfdCBMZWdhY3lE
YXRhYmFzZTo6ZmluZE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURh
dGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5
RGF0YWJhc2UuaAppbmRleCAxMTM3ZTVlMzAwMjQ0MTgxZTIxOGU0OWYzZDU3YmI3Y2Q1OGU2Nzdk
Li5lYTFlYjVmMjNkYTBmNTY2ZDk2MzM2OGE2OGJjMzFhZjQ0ZmRiMjYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJh
c2UuaApAQCAtODQsMTAgKzg0LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2xvc2VQZW5kaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZVBlbmRpbmc7IH0KICAgICB2b2lkIGZvcmNlQ2xvc2Uo
KTsKICAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhZGF0YTsgfQotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KTsKKyAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOwogCiAgICAgdXNpbmcgRXZl
bnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2
ZW50KEV2ZW50Jikgb3ZlcnJpZGU7CiAKICAgICBpbnQ2NF90IGZpbmRPYmplY3RTdG9yZUlkKGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc09iamVjdFN0b3JlKGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3QKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcml2YXRlOgogCiAg
ICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgdmVyc2lvbmNoYW5nZSBldmVudHMgd2FpdGluZyB0byBi
ZSBmaXJlZCBvbiB0aGlzCiAgICAgLy8gZGF0YWJhc2Ugc28gdGhhdCB3ZSBjYW4gY2FuY2VsIHRo
ZW0gaWYgdGhlIGRhdGFiYXNlIGNsb3Nlcy4KLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9l
bnF1ZXVlZEV2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9lbnF1ZXVlZEV2ZW50czsK
IAogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKaW5kZXggMzI5MGM1MGYwNDJlOTBlZjJl
YWJhNzI3NTgwZTcyMzkzNDgyNjU2ZC4uNzIxN2JjM2U0ZGE3MmJjNmI0Yzc2ZWVkOTVhZjc3MTVj
NDYxYWQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcApAQCAtMTM4LDExICsxMzgs
MTEgQEAgYm9vbCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpzaG91bGRFbnF1ZXVlRXZlbnQoKSBjb25z
dAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIExlZ2FjeU9wZW5EQlJlcXVlc3Q6OmRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIExlZ2FjeU9wZW5EQlJlcXVl
c3Q6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIC8vIElmIHRoZSBjb25uZWN0
aW9uIGNsb3NlZCBiZXR3ZWVuIG9uVXBncmFkZU5lZWRlZCBhbmQgdGhlIGRlbGl2ZXJ5IG9mIHRo
ZSAic3VjY2VzcyIgZXZlbnQsCiAgICAgLy8gYW4gImVycm9yIiBldmVudCBzaG91bGQgYmUgZmly
ZWQgaW5zdGVhZC4KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vz
c0V2ZW50ICYmIG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSAm
JiBtX3Jlc3VsdC0+bGVnYWN5RGF0YWJhc2UoKS0+aXNDbG9zZVBlbmRpbmcoKSkgeworICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCAmJiBtX3Jlc3VsdC0+
dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCRGF0YWJhc2UgJiYgbV9yZXN1bHQtPmxlZ2FjeURh
dGFiYXNlKCktPmlzQ2xvc2VQZW5kaW5nKCkpIHsKICAgICAgICAgbV9yZXN1bHQgPSBudWxscHRy
OwogICAgICAgICBvbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQuIikpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaAppbmRleCA1YTU5M2I1
ZjZlYWM3MGRiN2QzMDJiMDZlODljZWJlMzg0OGRlNDVmLi42NGY2NmM0MGIwNzgzMzU2NzFhM2Fi
OGRiOGI5ZGU3YmRjYWNiYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmgKQEAgLTQ4LDcg
KzQ4LDcgQEAgcHVibGljOgogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIEV2ZW50
VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgZmlu
YWw7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92
ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3Zl
cnJpZGUgZmluYWw7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5xdWV1
ZUV2ZW50KCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKaW5kZXggYTNjMjAyMGIw
MDBiNzM0ZWQ2Y2E3YTMzZWUzOTZlZDg4YThlZTUxYy4uMmM3NDdhNTZhYWFkNTNjZjdkNGQzYTNk
ZDA4NGY4ZDVmMzJhOWFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcApAQCAtMTY2LDcgKzE2Niw3IEBA
IHZvaWQgTGVnYWN5UmVxdWVzdDo6YWJvcnQoKQogCiAgICAgRXZlbnRRdWV1ZSYgZXZlbnRRdWV1
ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwogICAgIGZvciAoYXV0
byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7Ci0gICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2
ZW50UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKKyAgICAgICAgYm9vbCByZW1vdmVkID0gZXZl
bnRRdWV1ZS5jYW5jZWxFdmVudChldmVudCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3Zl
ZCwgcmVtb3ZlZCk7CiAgICAgfQogICAgIG1fZW5xdWV1ZWRFdmVudHMuY2xlYXIoKTsKQEAgLTI2
Miw3ICsyNjIsNyBAQCB2b2lkIExlZ2FjeVJlcXVlc3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUVycm9yPiBlcnJvcikKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1ZSkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0
cjxFdmVudD4gY3JlYXRlU3VjY2Vzc0V2ZW50KCkKK3N0YXRpYyBSZWY8RXZlbnQ+IGNyZWF0ZVN1
Y2Nlc3NFdmVudCgpCiB7CiAgICAgcmV0dXJuIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1
Y2Nlc3NFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KQEAgLTQ2Niw3ICs0NjYsNyBAQCBFdmVudFRh
cmdldEludGVyZmFjZSBMZWdhY3lSZXF1ZXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0
CiAgICAgcmV0dXJuIElEQlJlcXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAKLWJv
b2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkK
K2Jvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAg
TE9HKFN0b3JhZ2VBUEksICJMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50Iik7CiAgICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZyk7CkBAIC00
NzQsMTYgKzQ3NCwxNiBAQCBib29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgQVNTRVJUKG1faGFzUGVuZGluZ0FjdGl2aXR5KTsKICAg
ICBBU1NFUlQobV9lbnF1ZXVlZEV2ZW50cy5zaXplKCkpOwogICAgIEFTU0VSVChzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7Ci0g
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3JlYWR5U3RhdGUgPCBJREJSZXF1ZXN0UmVhZHlTdGF0
ZTo6RG9uZSwgIldoZW4gZGlzcGF0Y2hpbmcgZXZlbnQgJXMsIG1fcmVhZHlTdGF0ZSA8IERPTkUo
JWQpLCB3YXMgJWQiLCBldmVudC0+dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRp
Y19jYXN0PGludD4oSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpLCBzdGF0aWNfY2FzdDxpbnQ+
KG1fcmVhZHlTdGF0ZSkpOworICAgIEFTU0VSVChldmVudC50YXJnZXQoKSA9PSB0aGlzKTsKKyAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVhZHlTdGF0ZSA8IElEQlJlcXVlc3RSZWFkeVN0YXRl
OjpEb25lLCAiV2hlbiBkaXNwYXRjaGluZyBldmVudCAlcywgbV9yZWFkeVN0YXRlIDwgRE9ORSgl
ZCksIHdhcyAlZCIsIGV2ZW50LnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNf
Y2FzdDxpbnQ+KElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKSwgc3RhdGljX2Nhc3Q8aW50Piht
X3JlYWR5U3RhdGUpKTsKIAogICAgIERPTVJlcXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUobV9yZXF1
ZXN0U3RhdGUpOwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2Nr
ZWRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZl
bnQpCiAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lOwog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2ZW50LmdldCgp
KQorICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5wdHIoKSA9PSAmZXZlbnQpCiAgICAg
ICAgICAgICBtX2VucXVldWVkRXZlbnRzLnJlbW92ZShpKTsKICAgICB9CiAKQEAgLTUwMCw3ICs1
MDAsNyBAQCBib29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCiAKICAgICAvLyBDdXJzb3IgcHJvcGVydGllcyBzaG91bGQgbm90IHVwZGF0ZWQg
dW50aWwgdGhlIHN1Y2Nlc3MgZXZlbnQgaXMgYmVpbmcgZGlzcGF0Y2hlZC4KICAgICBSZWZQdHI8
TGVnYWN5Q3Vyc29yPiBjdXJzb3JUb05vdGlmeTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50KSB7CisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuc3VjY2Vzc0V2ZW50KSB7CiAgICAgICAgIGN1cnNvclRvTm90aWZ5ID0gZ2V0UmVz
dWx0Q3Vyc29yKCk7CiAgICAgICAgIGlmIChjdXJzb3JUb05vdGlmeSkgewogICAgICAgICAgICAg
Y3Vyc29yVG9Ob3RpZnktPnNldFZhbHVlUmVhZHkocmVxdWVzdFN0YXRlKCksIG1fY3Vyc29yS2V5
LnJlbGVhc2UoKSwgbV9jdXJzb3JQcmltYXJ5S2V5LnJlbGVhc2UoKSwgbV9jdXJzb3JWYWx1ZSk7
CkBAIC01MDgsMTkgKzUwOCwxOSBAQCBib29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSB7CisgICAgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSB7CiAgICAg
ICAgIEFTU0VSVCghbV9kaWRGaXJlVXBncmFkZU5lZWRlZEV2ZW50KTsKICAgICAgICAgbV9kaWRG
aXJlVXBncmFkZU5lZWRlZEV2ZW50ID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2hl
biB3ZSBhbGxvdyBjdXN0b20gZXZlbnQgZGlzcGF0Y2hpbmcsIHRoaXMgd2lsbCBwcm9iYWJseSBu
ZWVkIHRvIGNoYW5nZS4KLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVu
dCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQsICJl
dmVudCB0eXBlIHdhcyAlcyIsIGV2ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgY29uc3QgYm9vbCBzZXRUcmFuc2FjdGlvbkFjdGl2ZSA9IG1fdHJhbnNhY3Rpb24gJiYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQgfHwgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgbV9lcnJvckNvZGUgIT0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkFib3J0RXJyb3IpKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsb2Nr
ZWRFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVu
dCwgImV2ZW50IHR5cGUgd2FzICVzIiwgZXZlbnQudHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGNvbnN0IGJvb2wgc2V0VHJhbnNhY3Rpb25BY3RpdmUgPSBtX3RyYW5zYWN0aW9u
ICYmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCB8fCAoZXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYmIG1fZXJyb3JDb2RlICE9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiAKICAgICBpZiAoc2V0VHJhbnNhY3Rpb25BY3RpdmUp
CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEFjdGl2ZSh0cnVlKTsKIAotICAgIGJvb2wgZG9u
dFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQo
KSwgdGFyZ2V0cyk7CisgICAgYm9vbCBkb250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGV2ZW50LCB0YXJnZXRzKTsKIAogICAgIGlmIChtX3RyYW5zYWN0aW9u
KSB7CiAgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRv
bmUpCkBAIC01MjgsNyArNTI4LDcgQEAgYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgICAgIC8vIFBvc3NpYmx5IGFib3J0IHRo
ZSB0cmFuc2FjdGlvbi4gVGhpcyBtdXN0IG9jY3VyIGFmdGVyIHVucmVnaXN0ZXJpbmcgKHNvIHRo
aXMgcmVxdWVzdAogICAgICAgICAvLyBkb2Vzbid0IHJlY2VpdmUgYSBzZWNvbmQgZXJyb3IpIGFu
ZCBiZWZvcmUgZGVhY3RpdmF0aW5nICh3aGljaCBtaWdodCB0cmlnZ2VyIGNvbW1pdCkuCi0gICAg
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYmIGRvbnRQ
cmV2ZW50RGVmYXVsdCAmJiAhbV9yZXF1ZXN0QWJvcnRlZCkgeworICAgICAgICBpZiAoZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYmIGRvbnRQcmV2ZW50RGVmYXVsdCAm
JiAhbV9yZXF1ZXN0QWJvcnRlZCkgewogICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0RXJy
b3IobV9lcnJvciwgbV9lcnJvck1lc3NhZ2UpOwogICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+
YWJvcnQoSUdOT1JFX0VYQ0VQVElPTik7CiAgICAgICAgIH0KQEAgLTU0MSw3ICs1NDEsNyBAQCBi
b29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
CiAgICAgaWYgKGN1cnNvclRvTm90aWZ5KQogICAgICAgICBjdXJzb3JUb05vdGlmeS0+cG9zdFN1
Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKIAotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSURCUmVx
dWVzdFJlYWR5U3RhdGU6OkRvbmUgJiYgKCFjdXJzb3JUb05vdGlmeSB8fCBtX2N1cnNvckZpbmlz
aGVkKSAmJiBldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQp
CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSAmJiAo
IWN1cnNvclRvTm90aWZ5IHx8IG1fY3Vyc29yRmluaXNoZWQpICYmIGV2ZW50LnR5cGUoKSAhPSBl
dmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KQogICAgICAgICBtX2hhc1BlbmRpbmdBY3Rp
dml0eSA9IGZhbHNlOwogCiAgICAgcmV0dXJuIGRvbnRQcmV2ZW50RGVmYXVsdDsKQEAgLTU2NSw3
ICs1NjUsNyBAQCB2b2lkIExlZ2FjeVJlcXVlc3Q6OnRyYW5zYWN0aW9uRGlkRmluaXNoQW5kRGlz
cGF0Y2goKQogICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5n
OwogfQogCi12b2lkIExlZ2FjeVJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKK3ZvaWQgTGVnYWN5UmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBl
dmVudCkKIHsKICAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRl
OjpQZW5kaW5nIHx8IG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSk7
CiAKQEAgLTU3Niw4ICs1NzYsOCBAQCB2b2lkIExlZ2FjeVJlcXVlc3Q6OmVucXVldWVFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIAogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CiAK
LSAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2
ZW50KGV2ZW50LmdldCgpKSkKLSAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQp
OworICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVl
RXZlbnQoZXZlbnQuY29weVJlZigpKSkKKyAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQo
V1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVz
dC5oCmluZGV4IDVhZWZiMTFkMjI4MmM3NzgxZmE2ZjlkNjg2N2U2ODg1NmY1Nzk4MzEuLmViMWZi
YWVmMmFlNjI2NWUzMjE3YmJhY2U1ZjFjMDdlNWZkMWJjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaApAQCAt
OTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVuY2F1Z2h0RXhjZXB0aW9u
SW5FdmVudEhhbmRsZXIoKSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0
OjpkaXNwYXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVu
dCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB0cmFuc2FjdGlvbkRpZEZpbmlzaEFuZERpc3BhdGNo
KCk7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBMZWdh
Y3lSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4g
c291cmNlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBMZWdhY3lUcmFuc2FjdGlvbiop
OwotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVu
cXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbnF1ZXVl
RXZlbnQoKSBjb25zdDsKICAgICB2b2lkIG9uU3VjY2Vzc0ludGVybmFsKFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPik7CiAgICAgdm9pZCBvblN1Y2Nlc3NJbnRlcm5hbChjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHByaXZhdGU6CiAg
ICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOwogCiAgICAg
Ym9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9l
bnF1ZXVlZEV2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9lbnF1ZXVlZEV2ZW50czsK
IAogICAgIC8vIE9ubHkgdXNlZCBpZiB0aGUgcmVzdWx0IHR5cGUgd2lsbCBiZSBhIGN1cnNvci4K
ICAgICBJbmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2Fj
dGlvbi5jcHAKaW5kZXggZjBiMzRhMGRlODI2NTg4OGMwYTRkMzhhNjFhZWUxOWRiNjRjYjdiMS4u
Y2U4NDlmZDNmNzY0YTQ1ZmU4MDFjYWRlMjEwNmRlZDAxNWUzYjRlYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJh
bnNhY3Rpb24uY3BwCkBAIC0zMDYsMTMgKzMwNiwxMyBAQCBib29sIExlZ2FjeVRyYW5zYWN0aW9u
OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rp
dml0eSAmJiAhbV9jb250ZXh0U3RvcHBlZDsKIH0KIAotYm9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgTGVnYWN5VHJhbnNh
Y3Rpb246OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIExPRyhTdG9yYWdlQVBJ
LCAiTGVnYWN5VHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQiKTsKICAgICBBU1NFUlQobV9zdGF0
ZSAhPSBGaW5pc2hlZCk7CiAgICAgQVNTRVJUKG1faGFzUGVuZGluZ0FjdGl2aXR5KTsKICAgICBB
U1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoZXZlbnQtPnRhcmdl
dCgpID09IHRoaXMpOworICAgIEFTU0VSVChldmVudC50YXJnZXQoKSA9PSB0aGlzKTsKICAgICBt
X3N0YXRlID0gRmluaXNoZWQ7CiAKICAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgpAQCAt
MzI4LDggKzMyOCw4IEBAIGJvb2wgTGVnYWN5VHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgdGFyZ2V0cy5hcHBlbmQoZGIoKSk7CiAKICAgICAv
LyBGSVhNRTogV2hlbiB3ZSBhbGxvdyBjdXN0b20gZXZlbnQgZGlzcGF0Y2hpbmcsIHRoaXMgd2ls
bCBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZS4KLSAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5hYm9ydEV2ZW50KTsKLSAgICBib29sIHJldHVyblZhbHVlID0gSURCRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7CisgICAgQVNTRVJUKGV2ZW50LnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmFib3J0RXZlbnQpOworICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBJREJFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGV2ZW50LCB0YXJnZXRzKTsKICAgICAvLyBGSVhNRTogVHJ5IHRvIGNv
bnN0cnVjdCBhIHRlc3Qgd2hlcmUgfHRoaXN8IG91dGxpdmVzIG9wZW5EQlJlcXVlc3QgYW5kIHdl
CiAgICAgLy8gZ2V0IGEgY3Jhc2guCiAgICAgaWYgKG1fb3BlbkRCUmVxdWVzdCkgewpAQCAtMzU5
LDE0ICszNTksMTQgQEAgY29uc3QgY2hhciogTGVnYWN5VHJhbnNhY3Rpb246OmFjdGl2ZURPTU9i
amVjdE5hbWUoKSBjb25zdAogICAgIHJldHVybiAiTGVnYWN5VHJhbnNhY3Rpb24iOwogfQogCi12
b2lkIExlZ2FjeVRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQpCit2b2lkIExlZ2FjeVRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2
ZW50KQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdGF0ZSAhPSBGaW5pc2hlZCwgIkEg
ZmluaXNoZWQgdHJhbnNhY3Rpb24gdHJpZWQgdG8gZW5xdWV1ZSBhbiBldmVudCBvZiB0eXBlICVz
LiIsIGV2ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgaWYgKG1fY29u
dGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoZXZlbnQpOworICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQp
KTsKIH0KIAogSURCRGF0YWJhc2VCYWNrZW5kKiBMZWdhY3lUcmFuc2FjdGlvbjo6YmFja2VuZERC
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmgKaW5kZXggODNiNzk3MTE1ZTc5YjdlZjFiY2Nj
NWFhNDAzNzBlMjM3NWFlOTQyMi4uZjc5ZGVjMzMzOTVkYTJhNWJkNjYzM2E2MjNjODNhM2Y5NzA3
NTU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0xlZ2FjeVRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmgKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hF
dmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikg
b3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBv
dmVycmlkZSBmaW5hbDsKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdAogICAgIHZpcnR1YWwgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKQEAgLTEwNCw3ICsx
MDQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIExlZ2FjeVRyYW5zYWN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlLCBMZWdhY3lEYXRhYmFzZSosIExlZ2FjeU9wZW5EQlJlcXVlc3Qq
LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJik7CiAKLSAgICB2b2lkIGVucXVldWVFdmVudChQ
YXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsK
ICAgICB2b2lkIGNsb3NlT3BlbkN1cnNvcnMoKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vy
c29yKExlZ2FjeUN1cnNvciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtLmNwcAppbmRleCBjM2NjMzgxYTg4YTAyYTg4MjcxZmRiN2Q0MjU1
MWEwM2VkYzUxNzhiLi5kNWZiZGJmYjBmNjNiOTRmYjhhNTI2OTQxYWEzMzg5OTFkMTQ1ZmQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LmNwcApAQCAtMzAzLDcgKzMwMyw3IEBAIHZvaWQgTWVkaWFTdHJlYW06OmFjdGl2aXR5RXZlbnRU
aW1lckZpcmVkKCkKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEFjdGl2aXR5RXZlbnRzKTsK
IAogICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHMpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQo
ZXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogCiAgICAg
ZXZlbnRzLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAppbmRleCA1MjdiNWQxOWQ5MDhkNGEzZTE2MGUzNWJi
ZWI3YWE5ODhiY2Q1ZDk5Li45YTE1Y2JiMDNkMjE1YjYwOThjNzIxZTQ4ZmQ2NjBjYzg5ZTY4M2Zm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZT
ZW5kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRN
RlNlbmRlci5jcHAKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIFJUQ0RUTUZTZW5kZXI6OnNjaGVk
dWxlZEV2ZW50VGltZXJGaXJlZCgpCiAgICAgZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRFdmVudHMp
OwogCiAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hFdmVu
dChldmVudC5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRjaEV2ZW50KCpldmVudCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKaW5kZXggZDc3MDhjYTA1YmVhZDE0MTY3
N2ZjODQ1YTljMzM3NmU2NDRmZDMxNC4uYjY3YTZkOTE0ZDI3OTkwZTdhMzMwMDk0YTBkZTM3YzNk
ZDVmNzhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENEYXRhQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAgLTMyMSw3ICszMjEsNyBAQCB2b2lkIFJUQ0RhdGFDaGFu
bmVsOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAgIGV2ZW50cy5zd2FwKG1fc2NoZWR1
bGVkRXZlbnRzKTsKIAogICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHMpCi0gICAgICAgIGRp
c3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqZXZl
bnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IGRk
NDY0MWUxYjhkYTMyZGE3MTRmMzQ2ODEzMzk2N2M1ODFhNDNlNjUuLmZmNWFhZTQ0NjQ1ZjM0YTk1
NWRmMTQzYjE5ZjdiYTVkZWVmZjMzMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCkBAIC03NDIsNyArNzQy
LDcgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKCkK
ICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEV2ZW50cyk7CiAKICAgICBmb3IgKGF1dG8mIGV2
ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7Cisg
ICAgICAgIGRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIAogICAgIGV2ZW50cy5jbGVhcigpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50Lm1tCmluZGV4IGU0NTMyYzhhMTVmZDU2MjlkMmExODU4OGY5N2Ix
NTRhMjA4ZjBkYmMuLjZjODNlZGNlYTUwOGUzM2I2ZjY0NzYzYTc4OWVhNzUzMmE0MTRkMzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KQEAgLTI0Myw4ICsyNDMsOCBAQCB1bnNpZ25lZCBsb25n
IGxvbmcgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Om1vdmllU2l6ZSgpIGNvbnN0CiB2b2lk
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpwb3N0RXZlbnQoY29uc3QgU3RyaW5nJiBldmVu
dE5hbWUpCiB7CiAgICAgUmVmPEhUTUxQbHVnSW5FbGVtZW50PiBwcm90ZWN0KCptX3BhcmVudEVs
ZW1lbnQpOwotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZSwgZmFsc2UsIHRydWUpOwotICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChldmVu
dC5nZXQoKSk7CisgICAgUmVmPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
LCBmYWxzZSwgdHJ1ZSk7CisgICAgbV9wYXJlbnRFbGVtZW50LT5kaXNwYXRjaEV2ZW50KGV2ZW50
KTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5jcHAKaW5k
ZXggNjA3OGYzN2ZiOGQzYjkxZTRlYTc2YjQwZjNiMjQwY2IwMmRlMTNmYi4uNjhlYTI5NmFmODNh
NTFjM2RlNjE4Yzk5NmVkNDExNjQ2YjE4Yzk3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5j
cHAKQEAgLTU3LDcgKzU3LDcgQEAgYm9vbCBEZXZpY2VQcm94aW1pdHlDb250cm9sbGVyOjpoYXNM
YXN0RGF0YSgpCiAgICAgcmV0dXJuIGRldmljZVByb3hpbWl0eUNsaWVudCgpLT5oYXNMYXN0RGF0
YSgpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50PiBEZXZpY2VQcm94aW1pdHlDb250cm9sbGVyOjpn
ZXRMYXN0RXZlbnQoKQorUmVmUHRyPEV2ZW50PiBEZXZpY2VQcm94aW1pdHlDb250cm9sbGVyOjpn
ZXRMYXN0RXZlbnQoKQogewogICAgIHJldHVybiBEZXZpY2VQcm94aW1pdHlFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJraXRkZXZpY2Vwcm94aW1pdHlFdmVudCwgZGV2aWNlUHJveGltaXR5
Q2xpZW50KCktPnZhbHVlKCksIGRldmljZVByb3hpbWl0eUNsaWVudCgpLT5taW4oKSwgZGV2aWNl
UHJveGltaXR5Q2xpZW50KCktPm1heCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuaAppbmRl
eCA0MGRkZmI3ZjIxMGNmYTA0MWQ1ZDZmZGRhNjBkMmYwYmEyNTVhYjA2Li44OWNmMDU0OWE2NDNk
Mzk2YWEzMDQzZjVkM2ZhOTYyOWUxZDk0YzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3Byb3hpbWl0eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5oCkBA
IC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICBEZXZpY2VQcm94aW1pdHlDbGllbnQqIGRldmlj
ZVByb3hpbWl0eUNsaWVudCgpOwogCiAgICAgdmlydHVhbCBib29sIGhhc0xhc3REYXRhKCk7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQoKTsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCk7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciog
c3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgRGV2aWNlUHJveGltaXR5Q29udHJvbGxlciog
ZnJvbShQYWdlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXQuY3BwCmluZGV4IDY0NjU4NDAwMjBlYTY1MzlkODBmNGI0M2MxN2E1NDJkOGQzYjcyNzEu
LjQxZWIxMDllN2JlYmQ4YmVmMWI5NmU4NjQ1MjYyNTU2MzkyNTFkYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCkBAIC02NDgsNyArNjQ4
LDcgQEAgdm9pZCBXZWJTb2NrZXQ6OmRpc3BhdGNoT3JRdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBl
dmVudCkKICAgICBpZiAobV9zaG91bGREZWxheUV2ZW50RmlyaW5nKQogICAgICAgICBtX3BlbmRp
bmdFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkpOwogICAgIGVsc2UKLSAgICAgICAgZGlz
cGF0Y2hFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVu
dCk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRm9udExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5j
cHAKaW5kZXggZGRlMTMzY2M3YzcwMTQ0ZTJkMTAzNDRmYTc3MjMzYzkxZjA2NWZkNC4uOTU1OTll
MzhjYWVhNzJkODc5YjQxODZhMmM5NGE2ZjljMWE3YmI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9h
ZGVyLmNwcApAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgRm9udExvYWRlcjo6ZmlyZVBlbmRpbmdF
dmVudHMoKQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBwZW5k
aW5nRXZlbnRzLnNpemUoKTsgKytpbmRleCkKLSAgICAgICAgZGlzcGF0Y2hFdmVudChwZW5kaW5n
RXZlbnRzW2luZGV4XS5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRjaEV2ZW50KCpwZW5kaW5n
RXZlbnRzW2luZGV4XSk7CiAKICAgICBpZiAobG9hZGluZ0RvbmUgJiYgIW1fY2FsbGJhY2tzLmlz
RW1wdHkoKSkgewogICAgICAgICBWZWN0b3I8UmVmUHRyPFZvaWRDYWxsYmFjaz4+IGNhbGxiYWNr
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmNwcAppbmRl
eCAxMTUxYmQxZWJhNWJlNGU5NjQ4ZTRmM2E5ZDAyNDYxZGRhMzVkZGI4Li45MzA5MmJjZmI3ZmRi
OWZhNTEyODc5YzNmNTQ4OGEwNDg2MDdjMTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rl
dmljZU1vdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgRGV2aWNlTW90
aW9uQ29udHJvbGxlcjo6aGFzTGFzdERhdGEoKQogICAgIHJldHVybiBkZXZpY2VNb3Rpb25DbGll
bnQoKS0+bGFzdE1vdGlvbigpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50PiBEZXZpY2VNb3Rpb25D
b250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQorUmVmUHRyPEV2ZW50PiBEZXZpY2VNb3Rpb25Db250
cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQogewogICAgIHJldHVybiBEZXZpY2VNb3Rpb25FdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5kZXZpY2Vtb3Rpb25FdmVudCwgZGV2aWNlTW90aW9uQ2xpZW50
KCktPmxhc3RNb3Rpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlTW90aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNv
bnRyb2xsZXIuaAppbmRleCA3ZDcyZDUxNWNjNmQ4MTNkYzFmMzhjNjE5ZTg5ZTJjZGNmZDRiOWRh
Li4xNGRjNzQ0YjViNDRhZGEwNWIzZjNkYjNhZGY4OTgxZGNmOWVkYTI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVi
bGljOgogICAgIERldmljZU1vdGlvbkNsaWVudCogZGV2aWNlTW90aW9uQ2xpZW50KCk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzTGFzdERhdGEoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmVmUHRy
PEV2ZW50PiBnZXRMYXN0RXZlbnQoKSBvdmVycmlkZTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBzdXBwbGVtZW50TmFtZSgpOwogICAgIHN0YXRpYyBEZXZpY2VNb3Rpb25Db250cm9sbGVyKiBm
cm9tKFBhZ2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRh
dGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9u
Q29udHJvbGxlci5jcHAKaW5kZXggYWNlM2IyYjIyOTYzZTgxMjYzOWI5MDgyY2FiODQ2ZDEwMTdj
ZDUzNi4uMzk2YmY4Y2Y0MDk1ODQ4NzFmZTA2ZWE5NzNjMzBkNWQ2ZmQ4YzIzMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5jcHAKQEAg
LTc5LDcgKzc5LDcgQEAgYm9vbCBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI6Omhhc0xhc3RE
YXRhKCkKICAgICByZXR1cm4gZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKS0+bGFzdE9yaWVudGF0
aW9uKCk7CiB9CiAKLVBhc3NSZWZQdHI8RXZlbnQ+IERldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
cjo6Z2V0TGFzdEV2ZW50KCkKK1JlZlB0cjxFdmVudD4gRGV2aWNlT3JpZW50YXRpb25Db250cm9s
bGVyOjpnZXRMYXN0RXZlbnQoKQogewogICAgIHJldHVybiBEZXZpY2VPcmllbnRhdGlvbkV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmRldmljZW9yaWVudGF0aW9uRXZlbnQsIGRldmljZU9yaWVu
dGF0aW9uQ2xpZW50KCktPmxhc3RPcmllbnRhdGlvbigpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaAppbmRleCAxMTgzMDYzNDg2OWU5
MDZlNTg3NzM3NGJiNzNhMmZkZTRlOGI5Mjg3Li5iMDFmOGQxYTYyYjA0NzkyYjM1Zjg0M2EyZmYw
MDg1N2E1MzExNDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50
YXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0
aW9uQ29udHJvbGxlci5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc3Vt
ZVVwZGF0ZXMoKTsKICNlbHNlCiAgICAgdmlydHVhbCBib29sIGhhc0xhc3REYXRhKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQoKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgb3ZlcnJpZGU7CiAj
ZW5kaWYKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKaW5kZXggMWU0OTNiODMwNjU3MzE3MDU4ODk5ODVhZjIyY2Y0MWJlOTY3
Y2Y0YS4uZjVmYmViNGQwNmUzZWZhOWZhMmI5ZTg4MmIzMWJkZjc4YTdmM2U4OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCkBAIC00MDUwLDcgKzQwNTAsNyBAQCBFdmVudExpc3RlbmVyKiBEb2N1
bWVudDo6Z2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZQogICAgIHJldHVybiBtX2RvbVdpbmRvdy0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudFR5cGUpOwogfQogCi12b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRvd0V2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50LCAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KQordm9p
ZCBEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dFdmVudChFdmVudCYgZXZlbnQsIEV2ZW50VGFyZ2V0
KiB0YXJnZXQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIU5vRXZl
bnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwogICAgIGlm
ICghbV9kb21XaW5kb3cpCkBAIC00MDY4LDIxICs0MDY4LDIxIEBAIHZvaWQgRG9jdW1lbnQ6OmRp
c3BhdGNoV2luZG93TG9hZEV2ZW50KCkKICAgICBtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5kb2N1
bWVudERpZEZpbmlzaExvYWRFdmVudCgpOwogfQogCi12b2lkIERvY3VtZW50OjplbnF1ZXVlV2lu
ZG93RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIERvY3VtZW50OjplbnF1ZXVl
V2luZG93RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIGV2ZW50LT5zZXRUYXJnZXQo
bV9kb21XaW5kb3cuZ2V0KCkpOwotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQp
OworICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAK
LXZvaWQgRG9jdW1lbnQ6OmVucXVldWVEb2N1bWVudEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZURvY3VtZW50RXZlbnQoUmVmPEV2ZW50PiYmIGV2
ZW50KQogewogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgbV9ldmVudFF1ZXVlLmVu
cXVldWVFdmVudChldmVudCk7CisgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudChXVEY6Om1v
dmUoZXZlbnQpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZU92ZXJmbG93RXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIERvY3VtZW50OjplbnF1ZXVlT3ZlcmZsb3dFdmVu
dChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7Ci0gICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudChl
dmVudCk7CisgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsK
IH0KIAogUmVmUHRyPEV2ZW50PiBEb2N1bWVudDo6Y3JlYXRlRXZlbnQoY29uc3QgU3RyaW5nJiBl
dmVudFR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNTk4MCwyNCArNTk4MCwyNCBAQCB2b2lk
IERvY3VtZW50OjpzZW5kV2lsbFJldmVhbEVkZ2VFdmVudHNJZk5lZWRlZChjb25zdCBJbnRQb2lu
dCYgb2xkUG9zaXRpb24sIGNvbgogICAgIC8vIEJvdHRvbSBlZGdlLgogICAgIGlmIChuZXdQb3Np
dGlvbi55KCkgPj0gd2lsbFJldmVhbEJvdHRvbU5vdGlmaWNhdGlvblBvaW50ICYmIG5ld1Bvc2l0
aW9uLnkoKSA+IG9sZFBvc2l0aW9uLnkoKQogICAgICAgICAmJiB3aWxsUmV2ZWFsQm90dG9tTm90
aWZpY2F0aW9uUG9pbnQgPj0gb2xkUG9zaXRpb24ueSgpKSB7Ci0gICAgICAgIFJlZlB0cjxFdmVu
dD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0d2ls
bHJldmVhbGJvdHRvbUV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBSZWY8RXZlbnQ+IHdp
bGxSZXZlYWxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZl
YWxib3R0b21FdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgaWYgKCF0YXJnZXQpCi0gICAg
ICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQod2lsbFJldmVhbEV2ZW50LnJlbGVhc2UoKSk7Cisg
ICAgICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHdpbGxSZXZlYWxFdmVudC0+c2V0VGFyZ2V0
KHRhcmdldCk7Ci0gICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KHdpbGxSZXZl
YWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVu
dChXVEY6Om1vdmUod2lsbFJldmVhbEV2ZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAv
LyBUb3AgZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueSgpIDw9IHdpbGxSZXZlYWxUb3BOb3Rp
ZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi55KCkgPCBvbGRQb3NpdGlvbi55KCkKICAgICAg
ICAgJiYgd2lsbFJldmVhbFRvcE5vdGlmaWNhdGlvblBvaW50IDw9IG9sZFBvc2l0aW9uLnkoKSkg
ewotICAgICAgICBSZWZQdHI8RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWx0b3BFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAg
ICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS53ZWJraXR3aWxscmV2ZWFsdG9wRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlm
ICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVu
dC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3
aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3aWxsUmV2ZWFs
RXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVl
dWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRR
dWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC02MDA3LDI0ICs2MDA3LDI0IEBAIHZvaWQgRG9jdW1lbnQ6OnNlbmRXaWxs
UmV2ZWFsRWRnZUV2ZW50c0lmTmVlZGVkKGNvbnN0IEludFBvaW50JiBvbGRQb3NpdGlvbiwgY29u
CiAgICAgLy8gUmlnaHQgZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueCgpID49IHdpbGxSZXZl
YWxSaWdodE5vdGlmaWNhdGlvblBvaW50ICYmIG5ld1Bvc2l0aW9uLngoKSA+IG9sZFBvc2l0aW9u
LngoKQogICAgICAgICAmJiB3aWxsUmV2ZWFsUmlnaHROb3RpZmljYXRpb25Qb2ludCA+PSBvbGRQ
b3NpdGlvbi54KCkpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFscmlnaHRFdmVudCwgZmFs
c2UsIGZhbHNlKTsKKyAgICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFscmlnaHRFdmVudCwgZmFsc2UsIGZh
bHNlKTsKICAgICAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgICAgICBlbnF1ZXVlV2luZG93RXZl
bnQod2lsbFJldmVhbEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBlbnF1ZXVlV2luZG93
RXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIHdpbGxSZXZlYWxFdmVudC0+c2V0VGFyZ2V0KHRhcmdldCk7Ci0gICAgICAgICAgICBt
X2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAg
ICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudChXVEY6Om1vdmUod2lsbFJldmVhbEV2
ZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBMZWZ0IGVkZ2UuCiAgICAgaWYgKG5l
d1Bvc2l0aW9uLngoKSA8PSB3aWxsUmV2ZWFsTGVmdE5vdGlmaWNhdGlvblBvaW50ICYmIG5ld1Bv
c2l0aW9uLngoKSA8IG9sZFBvc2l0aW9uLngoKQogICAgICAgICAmJiB3aWxsUmV2ZWFsTGVmdE5v
dGlmaWNhdGlvblBvaW50IDw9IG9sZFBvc2l0aW9uLngoKSkgewotICAgICAgICBSZWZQdHI8RXZl
bnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdp
bGxyZXZlYWxsZWZ0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIFJlZjxFdmVudD4gd2ls
bFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0d2lsbHJldmVh
bGxlZnRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAg
ICAgICBlbnF1ZXVlV2luZG93RXZlbnQod2lsbFJldmVhbEV2ZW50LnJlbGVhc2UoKSk7CisgICAg
ICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHdpbGxSZXZlYWxFdmVudC0+c2V0VGFyZ2V0KHRh
cmdldCk7Ci0gICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KHdpbGxSZXZlYWxF
dmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudChX
VEY6Om1vdmUod2lsbFJldmVhbEV2ZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAjZWxzZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAppbmRleCAwM2QwYjQ1Y2Q3MTQ5NTFlN2Q1YWYwNDRjOWVmYjlhYWM2MWM1
MTY5Li5iNWZmM2Q0ZWMzNzFjMjFmNjBlNzY0YjJkODE1MzlmMGUyN2Y0MDVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaApAQCAtNzg4LDcgKzc4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdpbmRv
d0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUpOwogICAgIHZvaWQgc2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7CiAgICAgRXZl
bnRMaXN0ZW5lciogZ2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNwYXRjaFdpbmRv
d0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiA9IG51bGxw
dHIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hXaW5kb3dFdmVudChFdmVudCYs
IEV2ZW50VGFyZ2V0KiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGlzcGF0Y2hXaW5kb3dMb2FkRXZl
bnQoKTsKIAogICAgIFJlZlB0cjxFdmVudD4gY3JlYXRlRXZlbnQoY29uc3QgU3RyaW5nJiBldmVu
dFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTEwOTIsOSArMTA5Miw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAg
ICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdCBvdmVycmlkZSBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBlbnF1ZXVlV2luZG93RXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pOwotICAgIHZvaWQgZW5xdWV1ZURvY3VtZW50RXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4pOwotICAgIHZvaWQgZW5xdWV1ZU92ZXJmbG93RXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworICAgIHZvaWQgZW5xdWV1ZVdpbmRvd0V2ZW50KFJlZjxFdmVudD4mJik7CisgICAgdm9p
ZCBlbnF1ZXVlRG9jdW1lbnRFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZvaWQgZW5xdWV1ZU92
ZXJmbG93RXZlbnQoUmVmPEV2ZW50PiYmKTsKICAgICB2b2lkIGVucXVldWVQYWdlc2hvd0V2ZW50
KFBhZ2VzaG93RXZlbnRQZXJzaXN0ZW5jZSk7CiAgICAgdm9pZCBlbnF1ZXVlSGFzaGNoYW5nZUV2
ZW50KGNvbnN0IFN0cmluZyYgb2xkVVJMLCBjb25zdCBTdHJpbmcmIG5ld1VSTCk7CiAgICAgdm9p
ZCBlbnF1ZXVlUG9wc3RhdGVFdmVudChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
c3RhdGVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZl
bnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmNwcApp
bmRleCBhN2JiNWRmZTJjYWY4NDhkNGY1ZjkyZTI4MWM5NzMyZTQ4YTJlOWY5Li44ZWE1ZWMwMzc0
YmQxMzc4ODcxZDJhNjJkOTRhOWI5NzgyMGJjNmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRFdmVudFF1ZXVlLmNwcApAQCAtNjgsMTUgKzY4LDE1IEBAIERvY3VtZW50RXZlbnRRdWV1
ZTo6fkRvY3VtZW50RXZlbnRRdWV1ZSgpCiB7CiB9CiAKLWJvb2wgRG9jdW1lbnRFdmVudFF1ZXVl
OjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIERvY3VtZW50RXZl
bnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBBU1NFUlQo
ZXZlbnQtPnRhcmdldCgpKTsKLSAgICBBU1NFUlQoIW1fcXVldWVkRXZlbnRzLmNvbnRhaW5zKGV2
ZW50LmdldCgpKSk7CisgICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250YWlucyhldmVudC5w
dHIoKSkpOwogCiAgICAgaWYgKG1faXNDbG9zZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIG1fcXVldWVkRXZlbnRzLmFkZChldmVudCk7CisgICAgbV9xdWV1ZWRFdmVudHMuYWRkKGV2
ZW50LnB0cigpKTsKICAgICBpZiAoIW1fcGVuZGluZ0V2ZW50VGltZXItPmlzQWN0aXZlKCkpCiAg
ICAgICAgIG1fcGVuZGluZ0V2ZW50VGltZXItPnN0YXJ0T25lU2hvdCgwKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTk5LDkgKzk5LDkgQEAgdm9pZCBEb2N1bWVudEV2ZW50UXVldWU6OmVucXVldWVP
ckRpc3BhdGNoU2Nyb2xsRXZlbnQoTm9kZSYgdGFyZ2V0KQogICAgIGJvb2wgYnViYmxlcyA9IHRh
cmdldC5pc0RvY3VtZW50Tm9kZSgpOwogICAgIGJvb2wgY2FuY2VsYWJsZSA9IGZhbHNlOwogCi0g
ICAgUmVmUHRyPEV2ZW50PiBzY3JvbGxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnNjcm9sbEV2ZW50LCBidWJibGVzLCBjYW5jZWxhYmxlKTsKKyAgICBSZWY8RXZlbnQ+IHNjcm9s
bEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIGJ1YmJsZXMs
IGNhbmNlbGFibGUpOwogICAgIHNjcm9sbEV2ZW50LT5zZXRUYXJnZXQoJnRhcmdldCk7Ci0gICAg
ZW5xdWV1ZUV2ZW50KHNjcm9sbEV2ZW50LnJlbGVhc2UoKSk7CisgICAgZW5xdWV1ZUV2ZW50KFdU
Rjo6bW92ZShzY3JvbGxFdmVudCkpOwogfQogCiBib29sIERvY3VtZW50RXZlbnRRdWV1ZTo6Y2Fu
Y2VsRXZlbnQoRXZlbnQmIGV2ZW50KQpAQCAtMTQ2LDkgKzE0Niw5IEBAIHZvaWQgRG9jdW1lbnRF
dmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKICAgICAvLyBXaHkgZG8gd2Ug
aGF2ZSB0aGlzIHNwZWNpYWwgY2FzZSBoZXJlIGluc3RlYWQgb2YgYSB2aXJ0dWFsIGZ1bmN0aW9u
IG9uIEV2ZW50VGFyZ2V0PwogICAgIEV2ZW50VGFyZ2V0JiBldmVudFRhcmdldCA9ICpldmVudC50
YXJnZXQoKTsKICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBldmVudFRhcmdldC50b0RPTVdp
bmRvdygpKQotICAgICAgICB3aW5kb3ctPmRpc3BhdGNoRXZlbnQoJmV2ZW50LCAwKTsKKyAgICAg
ICAgd2luZG93LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBudWxscHRyKTsKICAgICBlbHNlCi0gICAg
ICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQoJmV2ZW50KTsKKyAgICAgICAgZXZlbnRUYXJn
ZXQuZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dEV2ZW50UXVldWUuaAppbmRleCA5ODI1ZWQyZjYwN2E0MmE4N2I1MTEzM2E5YjgxNWU1NWVmMjMw
ZWRjLi43ZDExMWQyZDRiNWJhNjljOGIzZTdjMjJmODc0NGNlNzk2NzUzYjlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICBleHBsaWNpdCBEb2N1bWVudEV2ZW50UXVldWUoRG9jdW1lbnQmKTsKICAgICB2aXJ0dWFs
IH5Eb2N1bWVudEV2ZW50UXVldWUoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBlbnF1ZXVlRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBlbnF1ZXVlRXZl
bnQoUmVmPEV2ZW50PiYmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuY2VsRXZlbnQo
RXZlbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSBvdmVycmlkZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDk4YTYxMGZlZDFjNmE5NTRmYTE0Mjc0ZWY5Y2FlMmNm
OGE3Mzk4M2MuLjNkNzNkZWE2OGZmNGQzNThjYzEwOGJkYmZjYmE1Mzc1Mzg3NTMzYTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKQEAgLTI1Myw3ICsyNTMsNyBAQCBib29sIEVsZW1lbnQ6OmRpc3Bh
dGNoTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtRXZlbnQsIGNv
bnN0CiAgICAgaWYgKGlzRm9yY2VFdmVudChwbGF0Zm9ybUV2ZW50KSAmJiAhZG9jdW1lbnQoKS5o
YXNMaXN0ZW5lclR5cGVGb3JFdmVudFR5cGUocGxhdGZvcm1FdmVudC50eXBlKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VFdmVudCA9IE1v
dXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSwgcGxh
dGZvcm1FdmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0KTsKKyAgICBSZWY8TW91c2VFdmVudD4g
bW91c2VFdmVudCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGRvY3VtZW50KCkuZGVm
YXVsdFZpZXcoKSwgcGxhdGZvcm1FdmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0KTsKIAogICAg
IGlmIChtb3VzZUV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gU2hvdWxkbid0IGhhcHBlbi4KQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIEVsZW1lbnQ6OmRp
c3BhdGNoTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtRXZlbnQs
IGNvbnN0CiAgICAgICAgIC8vIFNwZWNpYWwgY2FzZTogSWYgaXQncyBhIGRvdWJsZSBjbGljayBl
dmVudCwgd2UgYWxzbyBzZW5kIHRoZSBkYmxjbGljayBldmVudC4gVGhpcyBpcyBub3QgcGFydAog
ICAgICAgICAvLyBvZiB0aGUgRE9NIHNwZWNzLCBidXQgaXMgdXNlZCBmb3IgY29tcGF0aWJpbGl0
eSB3aXRoIHRoZSBvbmRibGNsaWNrPSIiIGF0dHJpYnV0ZS4gVGhpcyBpcyB0cmVhdGVkCiAgICAg
ICAgIC8vIGFzIGEgc2VwYXJhdGUgZXZlbnQgaW4gb3RoZXIgRE9NLWNvbXBsaWFudCBicm93c2Vy
cyBsaWtlIEZpcmVmb3gsIGFuZCBzbyB3ZSBkbyB0aGUgc2FtZS4KLSAgICAgICAgUmVmUHRyPE1v
dXNlRXZlbnQ+IGRvdWJsZUNsaWNrRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoKTsKKyAgICAg
ICAgUmVmPE1vdXNlRXZlbnQ+IGRvdWJsZUNsaWNrRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUo
KTsKICAgICAgICAgZG91YmxlQ2xpY2tFdmVudC0+aW5pdE1vdXNlRXZlbnQoZXZlbnROYW1lcygp
LmRibGNsaWNrRXZlbnQsCiAgICAgICAgICAgICBtb3VzZUV2ZW50LT5idWJibGVzKCksIG1vdXNl
RXZlbnQtPmNhbmNlbGFibGUoKSwgbW91c2VFdmVudC0+dmlldygpLCBtb3VzZUV2ZW50LT5kZXRh
aWwoKSwKICAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNjcmVlblgoKSwgbW91c2VFdmVudC0+c2Ny
ZWVuWSgpLCBtb3VzZUV2ZW50LT5jbGllbnRYKCksIG1vdXNlRXZlbnQtPmNsaWVudFkoKSwKQEAg
LTI4NSw3ICsyODUsNyBAQCBib29sIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtRXZlbnQsIGNvbnN0CiAKIGJvb2wgRWxlbWVudDo6
ZGlzcGF0Y2hXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCiB7Ci0g
ICAgUmVmUHRyPFdoZWVsRXZlbnQ+IHdoZWVsRXZlbnQgPSBXaGVlbEV2ZW50OjpjcmVhdGUoZXZl
bnQsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSk7CisgICAgUmVmPFdoZWVsRXZlbnQ+IHdoZWVs
RXZlbnQgPSBXaGVlbEV2ZW50OjpjcmVhdGUoZXZlbnQsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXco
KSk7CiAKICAgICAvLyBFdmVudHMgd2l0aCBubyBkZWx0YXMgYXJlIGltcG9ydGFudCBiZWNhdXNl
IHRoZXkgY29udmV5IHBsYXRmb3JtIGluZm9ybWF0aW9uIGFib3V0IHNjcm9sbCBnZXN0dXJlcwog
ICAgIC8vIGFuZCBtb21lbnR1bSBiZWdpbm5pbmcgb3IgZW5kaW5nLiBIb3dldmVyLCB0aG9zZSBl
dmVudHMgc2hvdWxkIG5vdCBiZSBzZW50IHRvIHRoZSBET00gc2luY2Ugc29tZQpAQCAtMzAwLDkg
KzMwMCw5IEBAIGJvb2wgRWxlbWVudDo6ZGlzcGF0Y2hXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYgZXZlbnQpCiAKIGJvb2wgRWxlbWVudDo6ZGlzcGF0Y2hLZXlFdmVudChjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIHBsYXRmb3JtRXZlbnQpCiB7Ci0gICAgUmVmUHRyPEtl
eWJvYXJkRXZlbnQ+IGV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRmb3JtRXZlbnQs
IGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSk7CisgICAgUmVmPEtleWJvYXJkRXZlbnQ+IGV2ZW50
ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRmb3JtRXZlbnQsIGRvY3VtZW50KCkuZGVmYXVs
dFZpZXcoKSk7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkgewot
ICAgICAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxlcigpLmFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2
ZW50UHJvcG9nYXRpb24oZXZlbnQuZ2V0KCkpKQorICAgICAgICBpZiAoZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLmFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oZXZlbnQpKQogICAg
ICAgICAgICAgZXZlbnQtPnN0b3BQcm9wYWdhdGlvbigpOwogICAgIH0KICAgICByZXR1cm4gRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMsIGV2ZW50KSAmJiAhZXZlbnQtPmRlZmF1
bHRIYW5kbGVkKCk7CkBAIC0yMzI0LDcgKzIzMjQsNyBAQCBib29sIEVsZW1lbnQ6OmRpc3BhdGNo
TW91c2VGb3JjZVdpbGxCZWdpbigpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBsYXRm
b3JtTW91c2VFdmVudCBwbGF0Zm9ybU1vdXNlRXZlbnQoZnJhbWUtPmV2ZW50SGFuZGxlcigpLmxh
c3RLbm93bk1vdXNlUG9zaXRpb24oKSwgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1v
dXNlR2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok5vVHlwZSwgMSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIFdURjo6Y3VycmVudFRpbWUoKSwgRm9yY2VBdENs
aWNrKTsKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VGb3JjZVdpbGxCZWdpbkV2ZW50ID0g
IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0bW91c2Vmb3JjZXdpbGxiZWdp
bkV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtTW91c2VFdmVudCwgMCwg
bnVsbHB0cik7CisgICAgUmVmPE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCA9
ICBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2V3aWxsYmVn
aW5FdmVudCwgZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNlRXZlbnQsIDAs
IG51bGxwdHIpOwogICAgIG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudC0+c2V0VGFyZ2V0KHRoaXMp
OwogICAgIGRpc3BhdGNoRXZlbnQobW91c2VGb3JjZVdpbGxCZWdpbkV2ZW50KTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudC5jcHAKaW5kZXggNTk2ZGQ4NThhMDRjMzYzYTc1ZTQ4ZWFjZjhhNzRhNWE4ZDZlZTg1NS4u
NWMxZTZmZTcwMTI3OGNkZTVhZTZlMDNlZDg1YTVlMjc0ZDc5YTBjMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQu
Y3BwCkBAIC0xNjIsMTIgKzE2MiwxMiBAQCBQYXNzUmVmUHRyPEV2ZW50PiBFdmVudDo6Y2xvbmVG
b3IoSFRNTElGcmFtZUVsZW1lbnQqKSBjb25zdAogICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKHR5
cGUoKSwgYnViYmxlcygpLCBjYW5jZWxhYmxlKCkpOwogfQogCi12b2lkIEV2ZW50OjpzZXRUYXJn
ZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KQordm9pZCBFdmVudDo6c2V0VGFyZ2V0
KFJlZlB0cjxFdmVudFRhcmdldD4mJiB0YXJnZXQpCiB7CiAgICAgaWYgKG1fdGFyZ2V0ID09IHRh
cmdldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90YXJnZXQgPSB0YXJnZXQ7CisgICAgbV90
YXJnZXQgPSBXVEY6Om1vdmUodGFyZ2V0KTsKICAgICBpZiAobV90YXJnZXQpCiAgICAgICAgIHJl
Y2VpdmVkVGFyZ2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCmluZGV4IDA5ZTc3OGQ1MTM2ZmYwZmNhODZl
NGRjMjlmZWJhYWU4OWMyMTdmMGMuLjBjY2NlMTA4ODUzODg1MmUzMWQ0ZjM0MjE2Y2VjZDE4ZTg5
NDIzM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudC5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQog
ICAgIAogICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5n
ZXQoKTsgfQotICAgIHZvaWQgc2V0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+KTsKKyAg
ICB2b2lkIHNldFRhcmdldChSZWZQdHI8RXZlbnRUYXJnZXQ+JiYpOwogCiAgICAgRXZlbnRUYXJn
ZXQqIGN1cnJlbnRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUYXJnZXQ7IH0KICAg
ICB2b2lkIHNldEN1cnJlbnRUYXJnZXQoRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQpIHsgbV9j
dXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNw
YXRjaGVyLmNwcAppbmRleCAyYmRjMzUwYjVhNWY3NjMzMGIyZDdkYjc2ODJiNzZmODg2NTNhYTJk
Li4zNDE4NDdmZDM4MDI4OGYzMDBlMGQ4M2I2YjA0M2RhYmU1MjE3NDk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtNzAsOSArNzAsOSBAQCBib29sIFdpbmRvd0V2
ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50KQogICAgIGlmICghbV93
aW5kb3cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGV2ZW50LnNldFRhcmdldChtX3Rh
cmdldC5nZXQoKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KG1fdGFyZ2V0LmNvcHlSZWYoKSk7CiAg
ICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChtX3dpbmRvdy5nZXQoKSk7Ci0gICAgbV93aW5kb3ct
PmZpcmVFdmVudExpc3RlbmVycygmZXZlbnQpOworICAgIG1fd2luZG93LT5maXJlRXZlbnRMaXN0
ZW5lcnMoZXZlbnQpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMDEsMTAgKzIwMSwxMCBA
QCBpbmxpbmUgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKE5v
ZGUmIHJlZmVyZW5jZU5vZGUpCiAgICAgcmV0dXJuICZyZWZlcmVuY2VOb2RlOwogfQogCi12b2lk
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiBub2RlLCBQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2
ZW50KE5vZGUmIG5vZGUsIEV2ZW50JiBldmVudCkKIHsKICAgICAvLyBXZSBuZWVkIHRvIHNldCB0
aGUgdGFyZ2V0IGhlcmUgYmVjYXVzZSBpdCBjYW4gZ28gYXdheSBieSB0aGUgdGltZSB3ZSBhY3R1
YWxseSBmaXJlIHRoZSBldmVudC4KLSAgICBldmVudC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVz
cGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpKTsKKyAgICBldmVudC5zZXRUYXJnZXQoZXZlbnRUYXJn
ZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobm9kZSkpOwogICAgIFNjb3BlZEV2ZW50UXVldWU6OnNp
bmdsZXRvbigpLmVucXVldWVFdmVudChldmVudCk7CiB9CiAKQEAgLTMwMCwyMyArMzAwLDE5IEBA
IHN0YXRpYyB2b2lkIGRpc3BhdGNoRXZlbnRJbkRPTShFdmVudCYgZXZlbnQsIGNvbnN0IEV2ZW50
UGF0aCYgcGF0aCwgV2luZG93RXZlbnRDCiAgICAgfQogfQogCi1ib29sIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50
KQorYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogb3JpZ2luLCBFdmVu
dCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIU5vRXZl
bnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIGlm
ICghcHJwRXZlbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCiAgICAgQVNTRVJUKG9yaWdpbik7
CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUob3JpZ2luKTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50
KHBycEV2ZW50KTsKICAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gbm9kZS0+ZG9jdW1lbnQo
KS52aWV3KCk7Ci0gICAgRXZlbnRQYXRoIGV2ZW50UGF0aCgqbm9kZSwgKmV2ZW50KTsKKyAgICBF
dmVudFBhdGggZXZlbnRQYXRoKCpub2RlLCBldmVudCk7CiAKLSAgICBpZiAoRXZlbnRUYXJnZXQq
IHJlbGF0ZWRUYXJnZXQgPSBldmVudC0+cmVsYXRlZFRhcmdldCgpKQorICAgIGlmIChFdmVudFRh
cmdldCogcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQoKSkKICAgICAgICAgZXZl
bnRQYXRoLnNldFJlbGF0ZWRUYXJnZXQoKm5vZGUsICpyZWxhdGVkVGFyZ2V0KTsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGlmIChpczxUb3VjaEV2ZW50
PigqZXZlbnQpKSB7Ci0gICAgICAgIGlmICghZXZlbnRQYXRoLnVwZGF0ZVRvdWNoTGlzdHMoZG93
bmNhc3Q8VG91Y2hFdmVudD4oKmV2ZW50KSkpCisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50
KSkgeworICAgICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRvd25jYXN0PFRv
dWNoRXZlbnQ+KGV2ZW50KSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5k
aWYKQEAgLTMyNCw4ICszMjAsOCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAgIENoaWxkTm9k
ZXNMYXp5U25hcHNob3Q6OnRha2VDaGlsZE5vZGVzTGF6eVNuYXBzaG90KCk7CiAKICAgICBFdmVu
dFRhcmdldCogdGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUp
OwotICAgIGV2ZW50LT5zZXRUYXJnZXQodGFyZ2V0KTsKLSAgICBpZiAoIWV2ZW50LT50YXJnZXQo
KSkKKyAgICBldmVudC5zZXRUYXJnZXQodGFyZ2V0KTsKKyAgICBpZiAoIWV2ZW50LnRhcmdldCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRl
bigpKTsKQEAgLTMzNCwzMCArMzMwLDMwIEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aEV2ZW50KE5vZGUqIG9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCiAKICAgICBJ
bnB1dEVsZW1lbnRDbGlja1N0YXRlIGNsaWNrSGFuZGxpbmdTdGF0ZTsKICAgICBpZiAoaXM8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUpKQotICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
Pigqbm9kZSkud2lsbERpc3BhdGNoRXZlbnQoKmV2ZW50LCBjbGlja0hhbmRsaW5nU3RhdGUpOwor
ICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkud2lsbERpc3BhdGNoRXZl
bnQoZXZlbnQsIGNsaWNrSGFuZGxpbmdTdGF0ZSk7CiAKLSAgICBpZiAoIWV2ZW50LT5wcm9wYWdh
dGlvblN0b3BwZWQoKSAmJiAhZXZlbnRQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgZGlzcGF0Y2hF
dmVudEluRE9NKCpldmVudCwgZXZlbnRQYXRoLCB3aW5kb3dFdmVudENvbnRleHQpOworICAgIGlm
ICghZXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2ZW50UGF0aC5pc0VtcHR5KCkpCisg
ICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTShldmVudCwgZXZlbnRQYXRoLCB3aW5kb3dFdmVudENv
bnRleHQpOwogCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdUYXJn
ZXRSdWxlcygqbm9kZSkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOwot
ICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOworICAgIGV2ZW50LnNldFRhcmdldChldmVudFRh
cmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcygqbm9kZSkpOworICAgIGV2ZW50LnNldEN1cnJlbnRU
YXJnZXQobnVsbHB0cik7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsKIAogICAgIGlmIChj
bGlja0hhbmRsaW5nU3RhdGUuc3RhdGVmdWwpCi0gICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCpub2RlKS5kaWREaXNwYXRjaENsaWNrRXZlbnQoKmV2ZW50LCBjbGlja0hhbmRsaW5n
U3RhdGUpOworICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkuZGlkRGlz
cGF0Y2hDbGlja0V2ZW50KGV2ZW50LCBjbGlja0hhbmRsaW5nU3RhdGUpOwogCiAgICAgLy8gQ2Fs
bCBkZWZhdWx0IGV2ZW50IGhhbmRsZXJzLiBXaGlsZSB0aGUgRE9NIGRvZXMgaGF2ZSBhIGNvbmNl
cHQgb2YgcHJldmVudGluZwogICAgIC8vIGRlZmF1bHQgaGFuZGxpbmcsIHRoZSBkZXRhaWwgb2Yg
d2hpY2ggaGFuZGxlcnMgYXJlIGNhbGxlZCBpcyBhbiBpbnRlcm5hbAogICAgIC8vIGltcGxlbWVu
dGF0aW9uIGRldGFpbCBhbmQgbm90IHBhcnQgb2YgdGhlIERPTS4KLSAgICBpZiAoIWV2ZW50LT5k
ZWZhdWx0UHJldmVudGVkKCkgJiYgIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICBj
YWxsRGVmYXVsdEV2ZW50SGFuZGxlcnNJblRoZUJ1YmJsaW5nT3JkZXIoKmV2ZW50LCBldmVudFBh
dGgpOworICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCgpICYmICFldmVudC5kZWZhdWx0
SGFuZGxlZCgpKQorICAgICAgICBjYWxsRGVmYXVsdEV2ZW50SGFuZGxlcnNJblRoZUJ1YmJsaW5n
T3JkZXIoZXZlbnQsIGV2ZW50UGF0aCk7CiAKICAgICAvLyBFbnN1cmUgdGhhdCBhZnRlciBldmVu
dCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKICAgICAvLyBvdXRl
cm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICBldmVudC0+c2V0VGFyZ2V0KHdpbmRvd0V2
ZW50Q29udGV4dC50YXJnZXQoKSk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQobnVsbHB0
cik7CisgICAgZXZlbnQuc2V0VGFyZ2V0KHdpbmRvd0V2ZW50Q29udGV4dC50YXJnZXQoKSk7Cisg
ICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKIAotICAgIHJldHVybiAhZXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQo
KTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNob3VsZEV2ZW50Q3Jvc3NTaGFkb3dCb3VuZGFy
eShFdmVudCYgZXZlbnQsIFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0JiB0YXJn
ZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggNjQwNDBkZDNjYzRiZTg3
YmViNjE4YzIwOWNmNDlmMjJjNDA2NTRkMi4uZjE4OWQ3YTRkZjJiODVkMjdhZjc0NWNmYWUzYWFl
NDY4MGRhOTM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtMzgsMTEg
KzM4LDExIEBAIGNsYXNzIE5vZGU7CiAKIG5hbWVzcGFjZSBFdmVudERpc3BhdGNoZXIgewogCi1i
b29sIGRpc3BhdGNoRXZlbnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+KTsKLXZvaWQgZGlzcGF0
Y2hTY29wZWRFdmVudChOb2RlJiwgUGFzc1JlZlB0cjxFdmVudD4pOworYm9vbCBkaXNwYXRjaEV2
ZW50KE5vZGUqLCBFdmVudCYpOwordm9pZCBkaXNwYXRjaFNjb3BlZEV2ZW50KE5vZGUmLCBFdmVu
dCYpOwogdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKEVsZW1lbnQqLCBFdmVudCogdW5kZXJs
eWluZ0V2ZW50LCBTaW11bGF0ZWRDbGlja01vdXNlRXZlbnRPcHRpb25zLCBTaW11bGF0ZWRDbGlj
a1Zpc3VhbE9wdGlvbnMpOwogCi19OworfQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5oCmlu
ZGV4IGU5OTM0YzUwOGMyZjE2NDlkNTRiODBiNjU4ZmY2ZGNiYjQxN2UxZjcuLmFjMzllYzYxN2Fm
OGVkNDYyYTUxY2RlZTdhMTVkMWY0ODgyODRiMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaApA
QCAtMzYsNyArMzYsNyBAQCBjbGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50UXVldWUgewogcHVibGlj
OgogICAgIHZpcnR1YWwgfkV2ZW50UXVldWUoKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1
ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSA9IDA7CisgICAgdmlydHVhbCBib29sIGVucXVldWVF
dmVudChSZWY8RXZlbnQ+JiYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuY2VsRXZlbnQoRXZl
bnQmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOyAvLyBEaXNjYXJkIGFjY3Vt
dWxhdGVkIGV2ZW50cyBhbmQgYWxsIGZ1dHVyZSBldmVudHMuIE5vIGV2ZW50cyB3aWxsIGJlIGRp
c3BhdGNoZWQgYWZ0ZXIgdGhpcy4KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAppbmRl
eCA3NjJhNmE1MjhmMzUxMzQzM2NkYmRjZjk0MGE2ZTYyOTc5NzM2MjViLi5hYjUxNTkyMmFiNGI3
MDBiZjFlNmViMzgyOTY3Mzc0N2FhODZkZTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5j
cHAKQEAgLTEzNCw3ICsxMzQsNyBAQCBib29sIEV2ZW50VGFyZ2V0OjpjbGVhckF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiAgICAgcmV0dXJuIHJl
bW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpOwogfQogCi1ib29s
IEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNl
cHRpb25Db2RlJiBlYykKK2Jvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQqIGV2
ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWV2ZW50KSB7CiAgICAgICAgIGVj
ID0gVHlwZUVycm9yOwpAQCAtMTQ5LDE2ICsxNDksMTYgQEAgYm9vbCBFdmVudFRhcmdldDo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gZGlzcGF0Y2hF
dmVudCgqZXZlbnQpOwogfQogCi1ib29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChFdmVu
dCYgZXZlbnQpCiB7Ci0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBldmVudC0+c2V0
Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRf
VEFSR0VUKTsKLSAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBmaXJlRXZlbnRMaXN0ZW5lcnMo
ZXZlbnQuZ2V0KCkpOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOworICAgIGV2ZW50LnNl
dFRhcmdldCh0aGlzKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgIGV2
ZW50LnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgYm9vbCBkZWZhdWx0UHJl
dmVudGVkID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKKyAgICBldmVudC5zZXRFdmVudFBo
YXNlKDApOwogICAgIHJldHVybiBkZWZhdWx0UHJldmVudGVkOwogfQogCkBAIC0xNjYsMzAgKzE2
NiwzMCBAQCB2b2lkIEV2ZW50VGFyZ2V0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVy
KCkKIHsKIH0KIAotc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbGVnYWN5VHlwZShjb25zdCBF
dmVudCogZXZlbnQpCitzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBsZWdhY3lUeXBlKGNvbnN0
IEV2ZW50JiBldmVudCkKIHsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
YW5pbWF0aW9uZW5kRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
YW5pbWF0aW9uZW5kRXZlbnQpCiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkud2Via2l0QW5p
bWF0aW9uRW5kRXZlbnQ7CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
YW5pbWF0aW9uc3RhcnRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMo
KS5hbmltYXRpb25zdGFydEV2ZW50KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtp
dEFuaW1hdGlvblN0YXJ0RXZlbnQ7CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQpCiAgICAgICAgIHJldHVybiBldmVu
dE5hbWVzKCkud2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQ7CiAKLSAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkudHJhbnNpdGlvbmVuZEV2ZW50KQorICAgIGlmIChldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCkKICAgICAgICAgcmV0
dXJuIGV2ZW50TmFtZXMoKS53ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQ7CiAKLSAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCkKKyAgICBpZiAoZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50KQogICAgICAgICByZXR1cm4gZXZlbnROYW1l
cygpLm1vdXNld2hlZWxFdmVudDsKIAogICAgIHJldHVybiBlbXB0eUF0b207CiB9CiAKLWJvb2wg
RXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCogZXZlbnQpCitib29sIEV2ZW50
VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmIGV2ZW50KQogewogICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZl
bnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBBU1NFUlQoZXZlbnQgJiYgZXZlbnQtPmlzSW5p
dGlhbGl6ZWQoKSk7CisgICAgQVNTRVJUKGV2ZW50LmlzSW5pdGlhbGl6ZWQoKSk7CiAKICAgICBF
dmVudFRhcmdldERhdGEqIGQgPSBldmVudFRhcmdldERhdGEoKTsKICAgICBpZiAoIWQpCkBAIC0y
MDAsMjEgKzIwMCwyMSBAQCBib29sIEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMoRXZl
bnQqIGV2ZW50KQogICAgIGlmICghbGVnYWN5VHlwZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICBs
ZWdhY3lMaXN0ZW5lcnNWZWN0b3IgPSBkLT5ldmVudExpc3RlbmVyTWFwLmZpbmQobGVnYWN5VHlw
ZU5hbWUpOwogCi0gICAgRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJzVmVjdG9yID0gZC0+
ZXZlbnRMaXN0ZW5lck1hcC5maW5kKGV2ZW50LT50eXBlKCkpOworICAgIEV2ZW50TGlzdGVuZXJW
ZWN0b3IqIGxpc3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAuZmluZChldmVudC50
eXBlKCkpOwogCiAgICAgaWYgKGxpc3RlbmVyc1ZlY3RvcikKICAgICAgICAgZmlyZUV2ZW50TGlz
dGVuZXJzKGV2ZW50LCBkLCAqbGlzdGVuZXJzVmVjdG9yKTsKICAgICBlbHNlIGlmIChsZWdhY3lM
aXN0ZW5lcnNWZWN0b3IpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIHR5cGVOYW1lID0gZXZlbnQt
PnR5cGUoKTsKLSAgICAgICAgZXZlbnQtPnNldFR5cGUobGVnYWN5VHlwZU5hbWUpOworICAgICAg
ICBBdG9taWNTdHJpbmcgdHlwZU5hbWUgPSBldmVudC50eXBlKCk7CisgICAgICAgIGV2ZW50LnNl
dFR5cGUobGVnYWN5VHlwZU5hbWUpOwogICAgICAgICBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQs
IGQsICpsZWdhY3lMaXN0ZW5lcnNWZWN0b3IpOwotICAgICAgICBldmVudC0+c2V0VHlwZSh0eXBl
TmFtZSk7CisgICAgICAgIGV2ZW50LnNldFR5cGUodHlwZU5hbWUpOwogICAgIH0KIAotICAgIHJl
dHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gIWV2ZW50LmRlZmF1
bHRQcmV2ZW50ZWQoKTsKIH0KICAgICAgICAgCi12b2lkIEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRM
aXN0ZW5lcnMoRXZlbnQqIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50TGlzdGVuZXJW
ZWN0b3ImIGVudHJ5KQordm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50
JiBldmVudCwgRXZlbnRUYXJnZXREYXRhKiBkLCBFdmVudExpc3RlbmVyVmVjdG9yJiBlbnRyeSkK
IHsKICAgICBSZWY8RXZlbnRUYXJnZXQ+IHByb3RlY3QoKnRoaXMpOwogCkBAIC0yMjYsMzIgKzIy
NiwzMiBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQqIGV2ZW50
LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50TGlzdAogICAgIHNpemVfdCBzaXplID0gZW50cnku
c2l6ZSgpOwogICAgIGlmICghZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMpCiAgICAgICAgIGQtPmZp
cmluZ0V2ZW50SXRlcmF0b3JzID0gc3RkOjptYWtlX3VuaXF1ZTxGaXJpbmdFdmVudEl0ZXJhdG9y
VmVjdG9yPigpOwotICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5hcHBlbmQoRmlyaW5nRXZl
bnRJdGVyYXRvcihldmVudC0+dHlwZSgpLCBpLCBzaXplKSk7CisgICAgZC0+ZmlyaW5nRXZlbnRJ
dGVyYXRvcnMtPmFwcGVuZChGaXJpbmdFdmVudEl0ZXJhdG9yKGV2ZW50LnR5cGUoKSwgaSwgc2l6
ZSkpOwogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBudWxscHRyOwogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRGlzcGF0Y2hFdmVudENvb2tpZTsKICAg
ICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CiAgICAgICAgIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwotICAgICAgICB3aWxsRGlzcGF0Y2hFdmVudENvb2tpZSA9
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQoKmRvY3VtZW50LCAq
ZXZlbnQsIHNpemUgPiAwKTsKKyAgICAgICAgd2lsbERpc3BhdGNoRXZlbnRDb29raWUgPSBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KCpkb2N1bWVudCwgZXZlbnQs
IHNpemUgPiAwKTsKICAgICB9CiAKICAgICBmb3IgKDsgaSA8IHNpemU7ICsraSkgewogICAgICAg
ICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZExpc3RlbmVyID0gZW50cnlbaV07
Ci0gICAgICAgIGlmIChldmVudC0+ZXZlbnRQaGFzZSgpID09IEV2ZW50OjpDQVBUVVJJTkdfUEhB
U0UgJiYgIXJlZ2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQorICAgICAgICBpZiAoZXZlbnQu
ZXZlbnRQaGFzZSgpID09IEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UgJiYgIXJlZ2lzdGVyZWRMaXN0
ZW5lci51c2VDYXB0dXJlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChldmVu
dC0+ZXZlbnRQaGFzZSgpID09IEV2ZW50OjpCVUJCTElOR19QSEFTRSAmJiByZWdpc3RlcmVkTGlz
dGVuZXIudXNlQ2FwdHVyZSkKKyAgICAgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UoKSA9PSBFdmVu
dDo6QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBJZiBzdG9wSW1tZWRpYXRlUHJvcGFnYXRp
b24gaGFzIGJlZW4gY2FsbGVkLCB3ZSBqdXN0IGJyZWFrIG91dCBpbW1lZGlhdGVseSwgd2l0aG91
dAogICAgICAgICAvLyBoYW5kbGluZyBhbnkgbW9yZSBldmVudHMgb24gdGhpcyB0YXJnZXQuCi0g
ICAgICAgIGlmIChldmVudC0+aW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgICAg
IGlmIChldmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVudChjb250ZXh0LCAqZXZlbnQp
OworICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSGFuZGxlRXZlbnQoY29udGV4dCwgZXZlbnQpOwogICAg
ICAgICAvLyBUbyBtYXRjaCBNb3ppbGxhLCB0aGUgQVRfVEFSR0VUIHBoYXNlIGZpcmVzIGJvdGgg
Y2FwdHVyaW5nIGFuZCBidWJibGluZwogICAgICAgICAvLyBldmVudCBsaXN0ZW5lcnMsIGV2ZW4g
dGhvdWdoIHRoYXQgdmlvbGF0ZXMgc29tZSB2ZXJzaW9ucyBvZiB0aGUgRE9NIHNwZWMuCi0gICAg
ICAgIHJlZ2lzdGVyZWRMaXN0ZW5lci5saXN0ZW5lci0+aGFuZGxlRXZlbnQoY29udGV4dCwgZXZl
bnQpOworICAgICAgICByZWdpc3RlcmVkTGlzdGVuZXIubGlzdGVuZXItPmhhbmRsZUV2ZW50KGNv
bnRleHQsICZldmVudCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSGFu
ZGxlRXZlbnQoY29va2llKTsKICAgICB9CiAgICAgZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMtPnJl
bW92ZUxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKaW5kZXggNjg4ZTZmZjcwYjkyY2I2
ODkzYmM5OWRlNzkwZjA2ODlkN2E3OTJlZi4uNzA3Nzc3NDFhN2M0ZmEyNzFmMDNlYWMyM2VjNzQ2
ZmI5YzU2YTNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKQEAgLTEyMyw4ICsxMjMsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFJlZlB0cjxFdmVudExpc3RlbmVyPiYmLCBib29sIHVzZUNhcHR1
cmUpOwogICAgIHZpcnR1YWwgYm9vbCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7IC8vIERPTSBBUEkKKyAgICB2aXJ0
dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChF
dmVudCosIEV4Y2VwdGlvbkNvZGUmKTsgLy8gRE9NIEFQSQogICAgIHZpcnR1YWwgdm9pZCB1bmNh
dWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7CiAKICAgICAvLyBVc2VkIGZvciBsZWdhY3kg
Im9uRXZlbnQiIGF0dHJpYnV0ZSBBUElzLgpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc0NhcHR1cmluZ0V2ZW50TGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlKTsKICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yJiBnZXRFdmVudExpc3RlbmVy
cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAKLSAgICBib29sIGZpcmVFdmVudExp
c3RlbmVycyhFdmVudCopOworICAgIGJvb2wgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50Jik7CiAg
ICAgYm9vbCBpc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCk7CiAKICAgICB2b2lkIHZpc2l0SlNFdmVu
dExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSA9IDA7CiAgICAgCi0gICAgdm9pZCBmaXJlRXZlbnRMaXN0
ZW5lcnMoRXZlbnQqLCBFdmVudFRhcmdldERhdGEqLCBFdmVudExpc3RlbmVyVmVjdG9yJik7Cisg
ICAgdm9pZCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmLCBFdmVudFRhcmdldERhdGEqLCBFdmVu
dExpc3RlbmVyVmVjdG9yJik7CiAKICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lckl0ZXJh
dG9yOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9HZW5lcmljRXZlbnRRdWV1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUuY3BwCmluZGV4IDcy
ZGQwZmVlZDAyYWUyZGM3YzlmM2ZkNmNkN2NkYTk5MzE2YzM5MmEuLmRiYTg1MjcwZGI0Nzk0ZjZm
YWIyM2EyNmIzOWYxY2I1OTRiMWRkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9H
ZW5lcmljRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0dlbmVyaWNFdmVu
dFF1ZXVlLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgR2VuZXJpY0V2ZW50UXVldWU6OmRp
c3BhdGNoT25lRXZlbnQoKQogICAgIFJlZjxFdmVudFRhcmdldD4gcHJvdGVjdChtX293bmVyKTsK
ICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gbV9wZW5kaW5nRXZlbnRzLnRha2VGaXJzdCgpOwog
ICAgIEV2ZW50VGFyZ2V0JiB0YXJnZXQgPSBldmVudC0+dGFyZ2V0KCkgPyAqZXZlbnQtPnRhcmdl
dCgpIDogbV9vd25lcjsKLSAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkp
OworICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KCpldmVudCk7CiB9CiAKIHZvaWQgR2VuZXJpY0V2
ZW50UXVldWU6OmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdl
UG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCmluZGV4IGMzMjU2
ODQ0ZjQ4NDU4ZTliYzc0N2NjMGU5ZDlkMzc1MDc4ZDhlYjAuLmEzYWI4OTZiZjUzY2Y4YTA3ZGU1
ZTkyZmU5Njc3NDkzYTZmOTQzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNz
YWdlUG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcApAQCAt
MTYwLDkgKzE2MCw4IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMoKQogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydEFy
cmF5PiBwb3J0cyA9IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCptX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIFdURjo6bW92ZShjaGFubmVscykpOwotICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2
dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFdURjo6bW92ZShwb3J0cyksIG1lc3NhZ2UucmVsZWFz
ZSgpKTsKLQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIEFTU0VSVF9OT19F
WENFUFRJT04pOworICAgICAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gTWVzc2FnZUV2ZW50OjpjcmVh
dGUoV1RGOjptb3ZlKHBvcnRzKSwgbWVzc2FnZS5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAzODdjYWViMGY1
M2JjMTJiODQ5NjMwMGY5YjgzOGU3YmE5YmIyOTc0Li4wOGZhMDI0NmE1MzNhNTI4MmUzNDZjYWUx
NjRhYjJlYjRhNTBhNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yMDkwLDE5ICsyMDkwLDE5IEBA
IHZvaWQgTm9kZTo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50KQogICAgIGlmIChpczxF
bGVtZW50PigqdGhpcykgJiYgZG93bmNhc3Q8RWxlbWVudD4oKnRoaXMpLmlzRGlzYWJsZWRGb3Jt
Q29udHJvbCgpICYmIGV2ZW50LmlzTW91c2VFdmVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBmaXJlRXZlbnRMaXN0ZW5lcnMoJmV2ZW50KTsKKyAgICBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZl
bnQpOwogfQogCi12b2lkIE5vZGU6OmRpc3BhdGNoU2NvcGVkRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCit2b2lkIE5vZGU6OmRpc3BhdGNoU2NvcGVkRXZlbnQoRXZlbnQmIGV2ZW50KQog
ewogICAgIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudCgqdGhpcywgZXZlbnQp
OwogfQogCi1ib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQp
Citib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpICYmICFQTEFURk9STShJT1MpCi0gICAgaWYgKGlzPFRvdWNoRXZlbnQ+KCpl
dmVudCkpCi0gICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoRXZlbnQoYWRvcHRSZWYoZG93bmNh
c3Q8VG91Y2hFdmVudD4oZXZlbnQubGVha1JlZigpKSkpOworICAgIGlmIChpczxUb3VjaEV2ZW50
PihldmVudCkpCisgICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoRXZlbnQoZG93bmNhc3Q8VG91
Y2hFdmVudD4oZXZlbnQpKTsKICNlbmRpZgogICAgIHJldHVybiBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnQodGhpcywgZXZlbnQpOwogfQpAQCAtMjEyNiwyNCArMjEyNiwyNCBAQCB2b2lk
IE5vZGU6OmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKQogYm9vbCBOb2RlOjpkaXNwYXRj
aERPTUFjdGl2YXRlRXZlbnQoaW50IGRldGFpbCwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWlu
Z0V2ZW50KQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50
RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBSZWZQ
dHI8VUlFdmVudD4gZXZlbnQgPSBVSUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTUFjdGl2
YXRlRXZlbnQsIHRydWUsIHRydWUsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSwgZGV0YWlsKTsK
KyAgICBSZWY8VUlFdmVudD4gZXZlbnQgPSBVSUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRP
TUFjdGl2YXRlRXZlbnQsIHRydWUsIHRydWUsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSwgZGV0
YWlsKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdFdmVudCk7CiAg
ICAgZGlzcGF0Y2hTY29wZWRFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT5kZWZhdWx0
SGFuZGxlZCgpOwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIVBMQVRGT1JNKElP
UykKLWJvb2wgTm9kZTo6ZGlzcGF0Y2hUb3VjaEV2ZW50KFBhc3NSZWZQdHI8VG91Y2hFdmVudD4g
ZXZlbnQpCitib29sIE5vZGU6OmRpc3BhdGNoVG91Y2hFdmVudChUb3VjaEV2ZW50JiBldmVudCkK
IHsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMsIGV2ZW50
KTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKElORElFX1VJKQotYm9vbCBOb2RlOjpkaXNwYXRj
aFVJUmVxdWVzdEV2ZW50KFBhc3NSZWZQdHI8VUlSZXF1ZXN0RXZlbnQ+IGV2ZW50KQorYm9vbCBO
b2RlOjpkaXNwYXRjaFVJUmVxdWVzdEV2ZW50KFVJUmVxdWVzdEV2ZW50JiBldmVudCkKIHsKICAg
ICBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQodGhpcywgZXZlbnQpOwotICAgIHJldHVy
biBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSB8fCBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwor
ICAgIHJldHVybiBldmVudC5kZWZhdWx0SGFuZGxlZCgpIHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50
ZWQoKTsKIH0KICNlbmRpZgogICAgIApAQCAtMjE1Myw4ICsyMTUzLDggQEAgYm9vbCBOb2RlOjpk
aXNwYXRjaEJlZm9yZUxvYWRFdmVudChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBSZWY8Tm9kZT4gcHJvdGVjdCgqdGhpcyk7Ci0gICAgUmVmUHRy
PEJlZm9yZUxvYWRFdmVudD4gYmVmb3JlTG9hZEV2ZW50ID0gQmVmb3JlTG9hZEV2ZW50OjpjcmVh
dGUoc291cmNlVVJMKTsKLSAgICBkaXNwYXRjaEV2ZW50KGJlZm9yZUxvYWRFdmVudC5nZXQoKSk7
CisgICAgUmVmPEJlZm9yZUxvYWRFdmVudD4gYmVmb3JlTG9hZEV2ZW50ID0gQmVmb3JlTG9hZEV2
ZW50OjpjcmVhdGUoc291cmNlVVJMKTsKKyAgICBkaXNwYXRjaEV2ZW50KGJlZm9yZUxvYWRFdmVu
dCk7CiAgICAgcmV0dXJuICFiZWZvcmVMb2FkRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgKaW5kZXggZWZmMDg2YTViZWUyZTBiZjg1Yjc3YWM4N2ViYzIxYTUwNzUzYWJk
Ny4uN2I1OGY0ZjhkMjNhOGRhMjE5ZjhjOTRmODNmYjc5YWM1YTQ5MjIzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CkBAIC01MTksOSArNTE5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZW1vdmVFdmVu
dExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwg
Ym9vbCB1c2VDYXB0dXJlKSBvdmVycmlkZTsKIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNw
YXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92
ZXJyaWRlOwogCi0gICAgdm9pZCBkaXNwYXRjaFNjb3BlZEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KTsKKyAgICB2b2lkIGRpc3BhdGNoU2NvcGVkRXZlbnQoRXZlbnQmKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYpOwogCkBAIC01MzMsMTAgKzUzMywxMCBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFQTEFURk9STShJ
T1MpCi0gICAgYm9vbCBkaXNwYXRjaFRvdWNoRXZlbnQoUGFzc1JlZlB0cjxUb3VjaEV2ZW50Pik7
CisgICAgYm9vbCBkaXNwYXRjaFRvdWNoRXZlbnQoVG91Y2hFdmVudCYpOwogI2VuZGlmCiAjaWYg
RU5BQkxFKElORElFX1VJKQotICAgIGJvb2wgZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChQYXNzUmVm
UHRyPFVJUmVxdWVzdEV2ZW50Pik7CisgICAgYm9vbCBkaXNwYXRjaFVJUmVxdWVzdEV2ZW50KFVJ
UmVxdWVzdEV2ZW50Jik7CiAjZW5kaWYKIAogICAgIGJvb2wgZGlzcGF0Y2hCZWZvcmVMb2FkRXZl
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50
UXVldWUuY3BwCmluZGV4IDIwZjE4Y2Q0YzJjYjg3MmU2NzZkYzcxNTM2NzVmNWU5ZWI4NDZmMzku
LjkzNTAxMzIzNDg0YTM1NDQzOGY0MWRhMWIzOTcwMDNhYTlkOTdhMjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5jcHAKQEAgLTQzLDI3ICs0MywyNyBAQCBTY29wZWRFdmVu
dFF1ZXVlJiBTY29wZWRFdmVudFF1ZXVlOjpzaW5nbGV0b24oKQogICAgIHJldHVybiBzY29wZWRF
dmVudFF1ZXVlOwogfQogCi12b2lkIFNjb3BlZEV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgU2NvcGVkRXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50
KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBpZiAobV9zY29waW5nTGV2ZWwpCi0gICAgICAg
IG1fcXVldWVkRXZlbnRzLmFwcGVuZChldmVudCk7CisgICAgICAgIG1fcXVldWVkRXZlbnRzLmFw
cGVuZChXVEY6Om1vdmUoZXZlbnQpKTsKICAgICBlbHNlCiAgICAgICAgIGRpc3BhdGNoRXZlbnQo
ZXZlbnQpOwogfQogCi12b2lkIFNjb3BlZEV2ZW50UXVldWU6OmRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQpIGNvbnN0Cit2b2lkIFNjb3BlZEV2ZW50UXVldWU6OmRpc3BhdGNo
RXZlbnQoRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkp
OworICAgIEFTU0VSVChldmVudC50YXJnZXQoKSk7CiAgICAgLy8gU3RvcmUgdGhlIHRhcmdldCBp
biBhIGxvY2FsIHZhcmlhYmxlIHRvIGF2b2lkIHBvc3NpYmx5IGRlcmVmZXJlbmNpbmcgYSBudWxs
aWZpZWQgUGFzc1JlZlB0ciBhZnRlciBpdCdzIHBhc3NlZCBvbi4KLSAgICBOb2RlKiBub2RlID0g
ZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0
KCktPnRvTm9kZSgpOwogICAgIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChub2RlLCBl
dmVudCk7CiB9CiAKIHZvaWQgU2NvcGVkRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hBbGxFdmVudHMoKQog
ewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBxdWV1ZWRFdmVudHMgPSBXVEY6Om1vdmUobV9x
dWV1ZWRFdmVudHMpOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBxdWV1ZWRFdmVudHMgPSBXVEY6
Om1vdmUobV9xdWV1ZWRFdmVudHMpOwogICAgIGZvciAoYXV0byYgcXVldWVkRXZlbnQgOiBxdWV1
ZWRFdmVudHMpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQocXVldWVkRXZlbnQucmVsZWFzZSgpKTsK
KyAgICAgICAgZGlzcGF0Y2hFdmVudChxdWV1ZWRFdmVudCk7CiB9CiAKIHZvaWQgU2NvcGVkRXZl
bnRRdWV1ZTo6aW5jcmVtZW50U2NvcGluZ0xldmVsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZl
bnRRdWV1ZS5oCmluZGV4IGNmNmIyOWM4ZDk5MTM3YjA1ZWM2NGU2MDQ3ZjM0MmU1YTI3ZGZjYjAu
Ljc4YmJjNjVmMzlhZGQzN2Q0MjFiZTA0MmUzMDlmOWJmYWIwNTE3MjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1Njb3BlZEV2ZW50UXVldWUuaApAQCAtNDYsMTggKzQ2LDE4IEBAIGNsYXNzIFNjb3BlZEV2
ZW50UXVldWUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjb3BlZEV2ZW50UXVldWUpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgU2NvcGVkRXZlbnRR
dWV1ZSYgc2luZ2xldG9uKCk7Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAKIHByaXZhdGU6CiAg
ICAgU2NvcGVkRXZlbnRRdWV1ZSgpID0gZGVmYXVsdDsKICAgICB+U2NvcGVkRXZlbnRRdWV1ZSgp
ID0gZGVsZXRlOwogCi0gICAgdm9pZCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBj
b25zdDsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBjb25zdDsKICAgICB2b2lkIGRp
c3BhdGNoQWxsRXZlbnRzKCk7CiAgICAgdm9pZCBpbmNyZW1lbnRTY29waW5nTGV2ZWwoKTsKICAg
ICB2b2lkIGRlY3JlbWVudFNjb3BpbmdMZXZlbCgpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVu
dD4+IG1fcXVldWVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX3F1ZXVlZEV2ZW50
czsKICAgICB1bnNpZ25lZCBtX3Njb3BpbmdMZXZlbCB7IDAgfTsKIAogICAgIGZyaWVuZCBjbGFz
cyBXVEY6Ok5ldmVyRGVzdHJveWVkPFdlYkNvcmU6OlNjb3BlZEV2ZW50UXVldWU+OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmluZGV4IDQyZjVlNzk5
MzkyZjUxZmM3OWRkZDExMzUzMzkyYWU0NzZiYzJlZmIuLmYwNTJkODZlYjU0NTBjMjcwMzhiZDU0
Y2RkZDU2YzhjODVkMDk5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHAKQEAgLTQwNCw3ICs0MDQsNyBAQCBib29sIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OmRpc3BhdGNoRXJyb3JFdmVudChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50
CiAKICAgICBBU1NFUlQoIW1faW5EaXNwYXRjaEVycm9yRXZlbnQpOwogICAgIG1faW5EaXNwYXRj
aEVycm9yRXZlbnQgPSB0cnVlOwotICAgIFJlZlB0cjxFcnJvckV2ZW50PiBlcnJvckV2ZW50ID0g
RXJyb3JFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsIHNvdXJjZU5hbWUsIGxpbmUsIGNvbHVtbik7Cisg
ICAgUmVmPEVycm9yRXZlbnQ+IGVycm9yRXZlbnQgPSBFcnJvckV2ZW50OjpjcmVhdGUobWVzc2Fn
ZSwgc291cmNlTmFtZSwgbGluZSwgY29sdW1uKTsKICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQo
ZXJyb3JFdmVudCk7CiAgICAgbV9pbkRpc3BhdGNoRXJyb3JFdmVudCA9IGZhbHNlOwogICAgIHJl
dHVybiBlcnJvckV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCA2ODkzNzcw
ZWUwMWQ2ZGI1ZmE5NmUxMmE0NzAzMTExNmRjM2IzOTdlLi5iNzFmOTczZTdlMzAxYmVkMDQxNzdh
Yjc2YWFhYjBhMzFlNmM1N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTY4MiwxMCArNjgyLDEwIEBAIGJvb2wg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjCiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmll
dygpKQogICAgICAgICB2aWV3LT5kaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3Jhcmls
eUZvckludGVyYWN0aW9uKCk7CiAKLSAgICBSZWZQdHI8VGV4dEV2ZW50PiBldmVudCA9IFRleHRF
dmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCks
IHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgUmVmPFRleHRFdmVudD4gZXZlbnQg
PSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRpY3RhdGlvbihtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdp
bmRvdygpLCB0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGV2ZW50LT5zZXRVbmRl
cmx5aW5nRXZlbnQodHJpZ2dlcmluZ0V2ZW50KTsKIAotICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVu
dChldmVudCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2
ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAppbmRleCBhZjUyODZkYzkxZWFmZWVhYTBhYWI2YTk2NWY0NmY3Yzk4
MjUwZGVjLi5jZjFiZTJhYmU2NGZhNzQ2YWU2YjEwNWI0NjQxNzgwYjc0NTBlNTNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBFZGl0b3I6OnBh
c3RlQXNQbGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBzbWFydFJlcGxh
Y2UpCiAgICAgTm9kZSogdGFyZ2V0ID0gZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpOwog
ICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47Ci0gICAgdGFyZ2V0LT5kaXNwYXRjaEV2
ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yUGxhaW5UZXh0UGFzdGUoZG9jdW1lbnQoKS5kb21XaW5k
b3coKSwgcGFzdGluZ1RleHQsIHNtYXJ0UmVwbGFjZSksIElHTk9SRV9FWENFUFRJT04pOworICAg
IHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvclBsYWluVGV4dFBhc3Rl
KGRvY3VtZW50KCkuZG9tV2luZG93KCksIHBhc3RpbmdUZXh0LCBzbWFydFJlcGxhY2UpKTsKIH0K
IAogdm9pZCBFZGl0b3I6OnBhc3RlQXNGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IHBhc3RpbmdGcmFnbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSwg
TWFpbEJsb2NrcXVvdGVIYW5kbGluZyByZXNwZWN0c01haWxCbG9ja3F1b3RlKQpAQCAtNDY5LDcg
KzQ2OSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBwYXN0aW5nRnJhZ21lbnQsIGJvb2wKICAgICBOb2RlKiB0YXJnZXQgPSBmaW5k
RXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJl
dHVybjsKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JGcmFn
bWVudFBhc3RlKGRvY3VtZW50KCkuZG9tV2luZG93KCksIHBhc3RpbmdGcmFnbWVudCwgc21hcnRS
ZXBsYWNlLCBtYXRjaFN0eWxlLCByZXNwZWN0c01haWxCbG9ja3F1b3RlKSwgSUdOT1JFX0VYQ0VQ
VElPTik7CisgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yRnJh
Z21lbnRQYXN0ZShkb2N1bWVudCgpLmRvbVdpbmRvdygpLCBwYXN0aW5nRnJhZ21lbnQsIHNtYXJ0
UmVwbGFjZSwgbWF0Y2hTdHlsZSwgcmVzcGVjdHNNYWlsQmxvY2txdW90ZSkpOwogfQogCiB2b2lk
IEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dEJ5cGFzc2luZ0RIVE1MKCkKQEAgLTg1MSw4ICs4NTEs
OCBAQCBib29sIEVkaXRvcjo6ZGlzcGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgRGF0YVRyYW5zZmVyQWNjZXNzUAogCiAgICAgUmVmUHRyPERhdGFUcmFuc2Zlcj4g
ZGF0YVRyYW5zZmVyID0gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUocG9saWN5
KTsKIAotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBDbGlwYm9hcmRFdmVudDo6Y3JlYXRlKGV2
ZW50VHlwZSwgdHJ1ZSwgdHJ1ZSwgZGF0YVRyYW5zZmVyKTsKLSAgICB0YXJnZXQtPmRpc3BhdGNo
RXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgIFJlZjxFdmVudD4gZXZlbnQgPSBD
bGlwYm9hcmRFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgdHJ1ZSwgdHJ1ZSwgZGF0YVRyYW5zZmVy
KTsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgIGJvb2wgbm9EZWZhdWx0
UHJvY2Vzc2luZyA9IGV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiAgICAgaWYgKG5vRGVmYXVs
dFByb2Nlc3NpbmcgJiYgcG9saWN5ID09IERhdGFUcmFuc2ZlckFjY2Vzc1BvbGljeTo6V3JpdGFi
bGUpIHsKICAgICAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29w
eUFuZFBhc3RlKCk7CkBAIC0xMDEyLDkgKzEwMTIsOSBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaEVk
aXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoUGFzc1JlZlB0cjxFbGVtZW50PiBwcnBTdGFydFJv
bwogICAgIFJlZlB0cjxFbGVtZW50PiBzdGFydFJvb3QgPSBwcnBTdGFydFJvb3Q7CiAgICAgUmVm
UHRyPEVsZW1lbnQ+IGVuZFJvb3QgPSBwcnBFbmRSb290OwogICAgIGlmIChzdGFydFJvb3QpCi0g
ICAgICAgIHN0YXJ0Um9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSksIElHTk9S
RV9FWENFUFRJT04pOworICAgICAgICBzdGFydFJvb3QtPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50LCBmYWxz
ZSwgZmFsc2UpKTsKICAgICBpZiAoZW5kUm9vdCAmJiBlbmRSb290ICE9IHN0YXJ0Um9vdCkKLSAg
ICAgICAgZW5kUm9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53
ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSksIElHTk9SRV9F
WENFUFRJT04pOworICAgICAgICBlbmRSb290LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZh
bHNlKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPENvbXBv
c2l0ZUVkaXRDb21tYW5kPiBjbWQpCkBAIC0xNzIwLDggKzE3MjAsOCBAQCB2b2lkIEVkaXRvcjo6
c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlvbk1vZGUgbW9k
ZSkKICAgICAvLyBXZSBzaG91bGQgc2VuZCB0aGlzIGV2ZW50IGJlZm9yZSBzZW5kaW5nIGEgVGV4
dEV2ZW50IGFzIHdyaXR0ZW4gaW4gU2VjdGlvbiA2LjIuMiBhbmQgNi4yLjMgb2YKICAgICAvLyB0
aGUgRE9NIEV2ZW50IHNwZWNpZmljYXRpb24uCiAgICAgaWYgKEVsZW1lbnQqIHRhcmdldCA9IGRv
Y3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSkgewotICAgICAgICBSZWZQdHI8Q29tcG9zaXRpb25F
dmVudD4gZXZlbnQgPSBDb21wb3NpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBv
c2l0aW9uZW5kRXZlbnQsIGRvY3VtZW50KCkuZG9tV2luZG93KCksIHRleHQpOwotICAgICAgICB0
YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpLCBJR05PUkVfRVhDRVBUSU9OKTsK
KyAgICAgICAgUmVmPENvbXBvc2l0aW9uRXZlbnQ+IGV2ZW50ID0gQ29tcG9zaXRpb25FdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBkb2N1bWVudCgpLmRvbVdp
bmRvdygpLCB0ZXh0KTsKKyAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAg
ICB9CiAKICAgICAvLyBJZiB0ZXh0IGlzIGVtcHR5LCB0aGVuIGRlbGV0ZSB0aGUgb2xkIGNvbXBv
c2l0aW9uIGhlcmUuICBJZiB0ZXh0IGlzIG5vbi1lbXB0eSwgSW5zZXJ0VGV4dENvbW1hbmQ6Omlu
cHV0CkBAIC0xNzk1LDggKzE3OTUsOCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29u
c3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGV2ZW50ID0gQ29tcG9zaXRpb25FdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBkb2N1bWVudCgpLmRvbVdpbmRv
dygpLCB0ZXh0KTsKICAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQuZ2V0KCkpCi0gICAgICAg
ICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04pOworICAg
ICAgICBpZiAoZXZlbnQpCisgICAgICAgICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoKmV2ZW50
KTsKICAgICB9CiAKICAgICAvLyBJZiB0ZXh0IGlzIGVtcHR5LCB0aGVuIGRlbGV0ZSB0aGUgb2xk
IGNvbXBvc2l0aW9uIGhlcmUuICBJZiB0ZXh0IGlzIG5vbi1lbXB0eSwgSW5zZXJ0VGV4dENvbW1h
bmQ6OmlucHV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCmluZGV4IDViNjhmNTdjZmFjMGJiY2E5ZjE4YjQyYjFhNWFiMGIxNWZiYzg1
OGIuLjc4OTcyYzc1MjI2YmRmNTRjYjc0NTQ5NzI3ODc2M2RjNDcyYTAzYjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0x
ODIsMTYgKzE4MiwxNiBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50
KERvY3VtZW50JiBkb2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudCogZgogICAgIHJlc3RvcmVBbmRS
ZW1vdmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7CiAKICAgICAv
LyBHaXZlIHRoZSByb290IGEgY2hhbmNlIHRvIGNoYW5nZSB0aGUgdGV4dC4KLSAgICBSZWZQdHI8
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+IGV2dCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Ojpj
cmVhdGUodGV4dCk7Ci0gICAgZWRpdGFibGVSb290LT5kaXNwYXRjaEV2ZW50KGV2dCwgQVNTRVJU
X05PX0VYQ0VQVElPTik7Ci0gICAgaWYgKHRleHQgIT0gZXZ0LT50ZXh0KCkgfHwgIWVkaXRhYmxl
Um9vdC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKSB7CisgICAgUmVmPEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50PiBldmVudCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUodGV4dCk7
CisgICAgZWRpdGFibGVSb290LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBpZiAodGV4dCAh
PSBldmVudC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhhc1JpY2hseUVkaXRhYmxlU3R5bGUo
KSkgewogICAgICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05vZGVzVG9GcmFnbWVu
dChob2xkZXIuZ2V0KCkpOwogCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIGV2dC0+dGV4dCgpKTsKKyAgICAgICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQoKnJhbmdlLCBldmVudC0+dGV4dCgpKTsKICAgICAgICAgaWYgKCFtX2ZyYWdtZW50
LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcAppbmRleCBmZDcyMTlk
NjBhM2E4ZmZhNjY2ZTAxNWU1ZGExMDUyYjI2Y2MxYzVjLi5jY2MzZGRlYWUyZTdlODU2YmZkMjM4
M2ZmZWVkNTEwYzE1NDc4YjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3BwCkBAIC02Myw5ICs2Myw5IEBAIFN0cmluZyBkaXNw
YXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlz
aWJsZVNlbGVjdGlvCiAgICAgaWYgKE5vZGUqIHN0YXJ0Tm9kZSA9IHNlbGVjdGlvbkZvckluc2Vy
dGlvbi5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSkgewogICAgICAgICBpZiAoc3RhcnROb2RlLT5y
b290RWRpdGFibGVFbGVtZW50KCkpIHsKICAgICAgICAgICAgIC8vIFNlbmQgQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQuIFRoZSBldmVudCBoYW5kbGVyIHdpbGwgdXBkYXRlIHRleHQgaWYgbmVjZXNz
YXJ5LgotICAgICAgICAgICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldnQgPSBC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOwotICAgICAgICAgICAgc3RhcnRO
b2RlLT5yb290RWRpdGFibGVFbGVtZW50KCktPmRpc3BhdGNoRXZlbnQoZXZ0LCBJR05PUkVfRVhD
RVBUSU9OKTsKLSAgICAgICAgICAgIG5ld1RleHQgPSBldnQtPnRleHQoKTsKKyAgICAgICAgICAg
IFJlZjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudDo6Y3JlYXRlKHRleHQpOworICAgICAgICAgICAgc3RhcnROb2RlLT5yb290RWRpdGFibGVF
bGVtZW50KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgICAgICAgICAgbmV3VGV4dCA9IGV2
ZW50LT50ZXh0KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG5ld1RleHQ7CkBAIC03
Nyw4ICs3Nyw4IEBAIGJvb2wgY2FuQXBwZW5kTmV3TGluZUZlZWRUb1NlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCi0gICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldmVu
dCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUoU3RyaW5nKCJcbiIpKTsKLSAgICBu
b2RlLT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBSZWY8QmVm
b3JlVGV4dEluc2VydGVkRXZlbnQ+IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNy
ZWF0ZShTdHJpbmcoIlxuIikpOworICAgIG5vZGUtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAg
IHJldHVybiBldmVudC0+dGV4dCgpLmxlbmd0aCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCA5NTdhOTdlYWEyNDM3ODRjYmY1MzI4Y2RlZTcxMzBm
ODQ2NmUyZDhhLi4wYWQ2MWYzN2VjMjFjYjQxYTgxMjZlZTM0NjM0MjY1MDY2YWQyZDk3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTUxMjAsMTAgKzUxMjAs
OSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyQ3VycmVudFBsYXliYWNrVGFy
Z2V0SXNXaXJlbGVzc0NoYW5nZWQoTWVkaWFQbAogICAgIHVwZGF0ZU1lZGlhU3RhdGUoVXBkYXRl
TWVkaWFTdGF0ZTo6QXN5bmNocm9ub3VzbHkpOwogfQogCi1ib29sIEhUTUxNZWRpYUVsZW1lbnQ6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCitib29sIEhUTUxNZWRp
YUVsZW1lbnQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxFdmVu
dD4gZXZlbnQgPSBwcnBFdmVudDsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVudCkKKyAg
ICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0
YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KQogICAgICAgICBzY2hlZHVsZURlbGF5ZWRBY3Rp
b24oQ2hlY2tQbGF5YmFja1RhcmdldENvbXBhdGFibGl0eSk7CiAgICAgcmV0dXJuIEhUTUxFbGVt
ZW50OjpkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgKaW5kZXggMDUwYWNiNDYwNzFhNGZlYzU0YWYxYzZmZTdmMzFmMGFlMTk4MDU5My4u
YTAzZjJjNGZjNmZkZWY2ZjJlYTdmMmY0ZTNlMDg1NjVhZWVmZmI1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTU2NCw3ICs1NjQsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCk7CiAK
ICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KE1FRElBX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFj
a0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcApp
bmRleCBkNmIxZjlhNmViNGQ3MmQ5OWUwYWQ5MWI4NTI0YjlkNGY4YzQ1MTQ1Li5iM2ViM2I4MDRl
ZGI0M2M1ZTc4YjhlNGNkZTcxOWNlMGNiZGUyYzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRyYWNrRWxlbWVudC5jcHAKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIEhUTUxUcmFja0VsZW1l
bnQ6OmRpZENvbXBsZXRlTG9hZChMb2FkU3RhdHVzIHN0YXR1cykKIAogICAgIGlmIChzdGF0dXMg
PT0gRmFpbHVyZSkgewogICAgICAgICBzZXRSZWFkeVN0YXRlKEhUTUxUcmFja0VsZW1lbnQ6OlRS
QUNLX0VSUk9SKTsKLSAgICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAg
ICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBm
YWxzZSwgZmFsc2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjcxLDcgKzI3MSw3
IEBAIHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6ZGlkQ29tcGxldGVMb2FkKExvYWRTdGF0dXMgc3Rh
dHVzKQogCiAgICAgLy8gICAgIDIuIElmIHRoZSBmaWxlIHdhcyBzdWNjZXNzZnVsbHkgcHJvY2Vz
c2VkLCBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGxvYWQgYXQgdGhlIAogICAgIC8vICAgICAg
ICB0cmFjayBlbGVtZW50LgotICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBk
aXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2Us
IGZhbHNlKSk7CiB9CiAKIC8vIE5PVEU6IFRoZSB2YWx1ZXMgaW4gdGhlIFRleHRUcmFjazo6UmVh
ZGluZXNzU3RhdGUgZW51bSBtdXN0IHN0YXkgaW4gc3luYyB3aXRoIHRob3NlIGluIEhUTUxUcmFj
a0VsZW1lbnQ6OlJlYWR5U3RhdGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01l
ZGlhQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5j
cHAKaW5kZXggOTYzNzI0NDY3Njg3NDA0ZWQ2MmVlMzdkMDE0ZWY0ZDY1MzM3MDcyMS4uZGJiMDJh
YjllOTQ5MTIxOTQ2YTAwZWJhZDczYTE4MjBjN2YxNmIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
TWVkaWFDb250cm9sbGVyLmNwcApAQCAtNTQ0LDExICs1NDQsMTEgQEAgdm9pZCBNZWRpYUNvbnRy
b2xsZXI6OnNjaGVkdWxlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiAKIHZv
aWQgTWVkaWFDb250cm9sbGVyOjphc3luY0V2ZW50VGltZXJGaXJlZCgpCiB7Ci0gICAgVmVjdG9y
PFJlZlB0cjxFdmVudD4+IHBlbmRpbmdFdmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IHBl
bmRpbmdFdmVudHM7CiAKICAgICBtX3BlbmRpbmdFdmVudHMuc3dhcChwZW5kaW5nRXZlbnRzKTsK
ICAgICBmb3IgKGF1dG8mIHBlbmRpbmdFdmVudCA6IHBlbmRpbmdFdmVudHMpCi0gICAgICAgIGRp
c3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50LnJlbGVhc2UoKSwgSUdOT1JFX0VYQ0VQVElPTik7Cisg
ICAgICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50KTsKIH0KIAogdm9pZCBNZWRpYUNvbnRy
b2xsZXI6OmNsZWFyUG9zaXRpb25UaW1lckZpcmVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29u
dHJvbGxlci5oCmluZGV4IDc1MzNiNDhjMjc4ZjVkNjFjNWY2ZTAyMmNlNzRjMzYxODU2ODQyYmMu
LjMxNWVlY2QxOTFhM2M2NzlhMTIyMGNjMGY2ZDliODNjZDBmMjUyYTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9NZWRpYUNvbnRyb2xsZXIuaApAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX211dGVkOwogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIFBsYXliYWNr
U3RhdGUgbV9wbGF5YmFja1N0YXRlOwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3BlbmRp
bmdFdmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IG1fcGVuZGluZ0V2ZW50czsKICAgICBU
aW1lciBtX2FzeW5jRXZlbnRUaW1lcjsKICAgICBtdXRhYmxlIFRpbWVyIG1fY2xlYXJQb3NpdGlv
blRpbWVyOwogICAgIFN0cmluZyBtX21lZGlhR3JvdXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IDMz
MGM5NTA0YjA3NjlkOTQwNzIzMTdkZGQyOTkzZDI5OGI5ZjlhZGMuLmVkMzA0OWQzODY2NjQ5NDVl
MDk5ZDY2M2RhODI5ZGI2NTkyMzhkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC00NzY2LDcgKzQ3
NjYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVTdGF0ZXNBZnRl
clZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQogewotICAgIFJlZlB0cjxXZWJHTENvbnRl
eHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53
ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCAiIik7CisgICAgUmVmPFdlYkdMQ29u
dGV4dEV2ZW50PiBldmVudCA9IFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmdsY29udGV4dGxvc3RFdmVudCwgZmFsc2UsIHRydWUsICIiKTsKICAgICBjYW52YXMoKS0+
ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgbV9yZXN0b3JlQWxsb3dlZCA9IGV2ZW50LT5kZWZh
dWx0UHJldmVudGVkKCk7CiAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29u
dGV4dCAmJiBtX3Jlc3RvcmVBbGxvd2VkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCBlZWEwZWM3NTc1ZDc3M2M4YjQ5NTU1Yjg2ZDY0
Yjk4MDNmZWZhY2I4Li5lZGIwNjI3MmNjODAxOTQ3OThiZmEyZmVmMGI0YjA0MWJhZDFhZmQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApA
QCAtODEsNyArODEsNyBAQCBzdGF0aWMgVVJMIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9u
KERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gZG9jdW1lbnQtPmZyYW1lKCktPmRvY3Vt
ZW50KCktPnVybCgpOwogfQogCi1pbmxpbmUgUGFzc1JlZlB0cjxFdmVudD4gY3JlYXRlU2NyaXB0
TG9hZEV2ZW50KCkKK2lubGluZSBSZWY8RXZlbnQ+IGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpCiB7
CiAgICAgcmV0dXJuIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2Us
IGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrQ3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcApp
bmRleCBjMjQ1OGQyNWVhOTQ4M2Y0ZDg2YTYzYzUwODY3NjVkNWY1NjM4ZTE0Li5hNmIxZGJiODg0
NGU3MzExYzU2YTg0Yjg1YjM4ZDM3NzFiMTM2MTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWUuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBUZXh0VHJhY2tD
dWU6OmludmFsaWRhdGVDdWVJbmRleCgpCiAgICAgbV9jdWVJbmRleCA9IGludmFsaWRDdWVJbmRl
eDsKIH0KIAotYm9vbCBUZXh0VHJhY2tDdWU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCitib29sIFRleHRUcmFja0N1ZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQp
CiB7CiAgICAgLy8gV2hlbiBhIFRleHRUcmFjaydzIG1vZGUgaXMgZGlzYWJsZWQ6IG5vIGN1ZXMg
YXJlIGFjdGl2ZSwgbm8gZXZlbnRzIGZpcmVkLgogICAgIGlmICghdHJhY2soKSB8fCB0cmFjaygp
LT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpkaXNhYmxlZEtleXdvcmQoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCmluZGV4IGVjMmFiMjJlMmY3NjNlODQwN2ZhM2QxODlk
OTZkYmMwZThkNmNiODIuLjY0ZTZmZDI1MGJjZjFiMzk5ZGMyMzNlM2Y0MTIxZWRhODhjYTVkNzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaApAQCAtNzksNyArNzks
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ3VlSW5kZXgoKTsKIAogICAgIHVzaW5n
IEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0
Y2hFdmVudChFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc0FjdGl2ZSgpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRJc0FjdGl2ZShib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCmluZGV4IDc4NGIzYTNlNDBiZGYyYWEwMmEyNTVlYjhlY2QyOThjYzUwNGEwZTQuLjFi
YWU0YTI0MDU5MTI1MTBlOGMyNzM5NzMyOTNhMDk0NGNhMDEyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMjg1OSw3ICsyODU5LDcgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6ZGlzcGF0Y2hVbmxvYWRFdmVudHMoVW5sb2FkRXZlbnRQb2xpY3kgdW5sb2FkRXZlbnRQb2xp
Y3kpCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE2NzcwCiAKICAgICAgICAgICAgIGlmICghbV9mcmFtZS5kb2N1bWVudCgpLT5pblBhZ2VD
YWNoZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEV2ZW50PiB1bmxvYWRFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAg
ICAgICAgICAgICAgUmVmPEV2ZW50PiB1bmxvYWRFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS51bmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgLy8gVGhl
IERvY3VtZW50TG9hZGVyIChhbmQgdGh1cyBpdHMgRG9jdW1lbnRMb2FkVGltaW5nKSBtaWdodCBn
ZXQgZGVzdHJveWVkCiAgICAgICAgICAgICAgICAgLy8gd2hpbGUgZGlzcGF0Y2hpbmcgdGhlIGV2
ZW50LCBzbyBwcm90ZWN0IGl0IHRvIHByZXZlbnQgd3JpdGluZyB0aGUgZW5kCiAgICAgICAgICAg
ICAgICAgLy8gdGltZSBpbnRvIGZyZWVkIG1lbW9yeS4KQEAgLTI5MDUsMTggKzI5MDUsMTggQEAg
Ym9vbCBGcmFtZUxvYWRlcjo6ZGlzcGF0Y2hCZWZvcmVVbmxvYWRFdmVudChDaHJvbWUmIGNocm9t
ZSwgRnJhbWVMb2FkZXIqIGZyYW1lTG8KICAgICBpZiAoIWRvY3VtZW50LT5ib2R5T3JGcmFtZXNl
dCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBSZWZQdHI8QmVmb3JlVW5sb2Fk
RXZlbnQ+IGJlZm9yZVVubG9hZEV2ZW50ID0gQmVmb3JlVW5sb2FkRXZlbnQ6OmNyZWF0ZSgpOwor
ICAgIFJlZjxCZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2FkRXZlbnQgPSBCZWZvcmVVbmxv
YWRFdmVudDo6Y3JlYXRlKCk7CiAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNo
ZWQgPSBQYWdlRGlzbWlzc2FsVHlwZTo6QmVmb3JlVW5sb2FkOwogCiAgICAgewogICAgICAgICBG
b3JiaWRQcm9tcHRzU2NvcGUgZm9yYmlkUHJvbXB0cyhtX2ZyYW1lLnBhZ2UoKSk7Ci0gICAgICAg
IGRvbVdpbmRvdy0+ZGlzcGF0Y2hFdmVudChiZWZvcmVVbmxvYWRFdmVudC5nZXQoKSwgZG9tV2lu
ZG93LT5kb2N1bWVudCgpKTsKKyAgICAgICAgZG9tV2luZG93LT5kaXNwYXRjaEV2ZW50KGJlZm9y
ZVVubG9hZEV2ZW50LCBkb21XaW5kb3ctPmRvY3VtZW50KCkpOwogICAgIH0KIAogICAgIG1fcGFn
ZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gUGFnZURpc21pc3NhbFR5cGU6Ok5vbmU7
CiAKICAgICBpZiAoIWJlZm9yZVVubG9hZEV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkpCi0gICAg
ICAgIGRvY3VtZW50LT5kZWZhdWx0RXZlbnRIYW5kbGVyKGJlZm9yZVVubG9hZEV2ZW50LmdldCgp
KTsKKyAgICAgICAgZG9jdW1lbnQtPmRlZmF1bHRFdmVudEhhbmRsZXIoYmVmb3JlVW5sb2FkRXZl
bnQucHRyKCkpOwogICAgIGlmIChiZWZvcmVVbmxvYWRFdmVudC0+cmV0dXJuVmFsdWUoKS5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCmluZGV4IDk4OTA5OTQw
ZTM0NGYzYjI4NmIyMGNiNTFhZDEyMDgwNmYyMjNkMjMuLjg4ZTdlZTJiMjUzMWRmZjcxNzYxZjJj
NWU3MGNlNDgyZTg4YmE0ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcApAQCAtMzUwLDcgKzM1MCw3IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OmRpc3BhdGNoRE9NRXZlbnQoRXZlbnRJRCBpZCwgaW50
IHRvdGFsLCBpbnQgZG9uZSkKICAgICAgICAgICAgIGV2ZW50ID0gUHJvZ3Jlc3NFdmVudDo6Y3Jl
YXRlKGV2ZW50VHlwZSwgdHJ1ZSwgZG9uZSwgdG90YWwpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpOwotICAg
ICAgICBtX2RvbUFwcGxpY2F0aW9uQ2FjaGUtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIEFTU0VSVF9O
T19FWENFUFRJT04pOworICAgICAgICBtX2RvbUFwcGxpY2F0aW9uQ2FjaGUtPmRpc3BhdGNoRXZl
bnQoKmV2ZW50KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCAx
ZWZhZWI0MWE3OGYyZWNhOTg4NTNmNzcyMWQ5ZThlNWY5NDVlODU5Li5mODllMTk0Njg4OTRmMzUz
MDJkZDU1Y2YwNGUzMWMwZTZjMmE5NjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBA
IC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRy
PE1lc3NhZ2VFdmVudD4gZXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAg
ICBSZWY8TWVzc2FnZUV2ZW50PiBldmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
KQogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0QXJyYXk+IG1lc3Nh
Z2VQb3J0cyA9IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCpjb250ZXh0LCBXVEY6Om1vdmUo
bV9jaGFubmVscykpOwogICAgICAgICByZXR1cm4gTWVzc2FnZUV2ZW50OjpjcmVhdGUoV1RGOjpt
b3ZlKG1lc3NhZ2VQb3J0cyksIG1fbWVzc2FnZSwgbV9vcmlnaW4sIFN0cmluZygpLCBtX3NvdXJj
ZSk7CkBAIC05MjgsNyArOTI4LDcgQEAgdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlVGltZXJG
aXJlZChQb3N0TWVzc2FnZVRpbWVyJiB0aW1lcikKICAgICBkaXNwYXRjaE1lc3NhZ2VFdmVudFdp
dGhPcmlnaW5DaGVjayh0aW1lci50YXJnZXRPcmlnaW4oKSwgdGltZXIuZXZlbnQoZG9jdW1lbnQo
KSksIHRpbWVyLnN0YWNrVHJhY2UoKSk7CiB9CiAKLXZvaWQgRE9NV2luZG93OjpkaXNwYXRjaE1l
c3NhZ2VFdmVudFdpdGhPcmlnaW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5kZWRUYXJnZXRP
cmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gc3RhY2tUcmFjZSkKK3ZvaWQgRE9NV2luZG93OjpkaXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhP
cmlnaW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5kZWRUYXJnZXRPcmlnaW4sIEV2ZW50JiBl
dmVudCwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IHN0YWNrVHJhY2UpCiB7CiAgICAgaWYg
KGludGVuZGVkVGFyZ2V0T3JpZ2luKSB7CiAgICAgICAgIC8vIENoZWNrIHRhcmdldCBvcmlnaW4g
bm93IHNpbmNlIHRoZSB0YXJnZXQgZG9jdW1lbnQgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUg
dGltZXIgd2FzIHNjaGVkdWxlZC4KQEAgLTE4NzAsNyArMTg3MCw3IEBAIGJvb2wgRE9NV2luZG93
OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVu
dExpc3RlbmVyCiAKIHZvaWQgRE9NV2luZG93OjpkaXNwYXRjaExvYWRFdmVudCgpCiB7Ci0gICAg
UmVmUHRyPEV2ZW50PiBsb2FkRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2
ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICBSZWY8RXZlbnQ+IGxvYWRFdmVudCA9IEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAobV9m
cmFtZSAmJiBtX2ZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpICYmICFtX2ZyYW1lLT5s
b2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT50aW1pbmcoKS5sb2FkRXZlbnRTdGFydCgpKSB7CiAg
ICAgICAgIC8vIFRoZSBEb2N1bWVudExvYWRlciAoYW5kIHRodXMgaXRzIERvY3VtZW50TG9hZFRp
bWluZykgbWlnaHQgZ2V0IGRlc3Ryb3llZCB3aGlsZSBkaXNwYXRjaGluZwogICAgICAgICAvLyB0
aGUgZXZlbnQsIHNvIHByb3RlY3QgaXQgdG8gcHJldmVudCB3cml0aW5nIHRoZSBlbmQgdGltZSBp
bnRvIGZyZWVkIG1lbW9yeS4KQEAgLTE4OTIsMzQgKzE4OTIsMzMgQEAgdm9pZCBET01XaW5kb3c6
OmRpc3BhdGNoTG9hZEV2ZW50KCkKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmxvYWRF
dmVudEZpcmVkKGZyYW1lKCkpOwogfQogCi1ib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwVGFy
Z2V0KQorYm9vbCBET01XaW5kb3c6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50LCBFdmVudFRh
cmdldCogdGFyZ2V0KQogewogICAgIFJlZjxFdmVudFRhcmdldD4gcHJvdGVjdCgqdGhpcyk7Ci0g
ICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwogCiAgICAgLy8gUGF1c2luZyBhIHBh
Z2UgbWF5IHRyaWdnZXIgcGFnZWhpZGUgYW5kIHBhZ2VzaG93IGV2ZW50cy4gV2ViQ29yZSBhbHNv
IGltcGxpY2l0bHkgZmlyZXMgdGhlc2UKICAgICAvLyBldmVudHMgd2hlbiBjbG9zaW5nIGEgV2Vi
Vmlldy4gSGVyZSB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBzdGF0ZSBvZiB0aGUgcGFnZSB0byBwcmV2
ZW50IGR1cGxpY2F0ZSwKICAgICAvLyB1bmJhbGFuY2VkIGV2ZW50cyBwZXIgdGhlIGRlZmluaXRp
b24gb2YgdGhlIHBhZ2VzaG93IGV2ZW50OgogICAgIC8vIDxodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9oaXN0b3J5Lmh0bWwjZXZlbnQt
cGFnZXNob3c+LgotICAgIGlmIChldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBQYWdlVHJhbnNp
dGlvbkV2ZW50SW50ZXJmYWNlVHlwZSkgewotICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkucGFnZXNob3dFdmVudCkgeworICAgIGlmIChldmVudC5ldmVudEludGVyZmFj
ZSgpID09IFBhZ2VUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VUeXBlKSB7CisgICAgICAgIGlmIChl
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnBhZ2VzaG93RXZlbnQpIHsKICAgICAgICAgICAg
IGlmIChtX2xhc3RQYWdlU3RhdHVzID09IFBhZ2VTdGF0dXNTaG93bikKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsgLy8gRXZlbnQgd2FzIHByZXZpb3VzbHkgZGlzcGF0Y2hlZDsgZG8gbm90
IGZpcmUgYSBkdXBsaWNhdGUgZXZlbnQuCiAgICAgICAgICAgICBtX2xhc3RQYWdlU3RhdHVzID0g
UGFnZVN0YXR1c1Nob3duOwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLnBhZ2VoaWRlRXZlbnQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQpIHsKICAgICAgICAgICAgIGlmIChtX2xh
c3RQYWdlU3RhdHVzID09IFBhZ2VTdGF0dXNIaWRkZW4pCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7IC8vIEV2ZW50IHdhcyBwcmV2aW91c2x5IGRpc3BhdGNoZWQ7IGRvIG5vdCBmaXJlIGEg
ZHVwbGljYXRlIGV2ZW50LgogICAgICAgICAgICAgbV9sYXN0UGFnZVN0YXR1cyA9IFBhZ2VTdGF0
dXNIaWRkZW47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBldmVudC0+c2V0VGFyZ2V0KHBycFRh
cmdldCA/IHBycFRhcmdldCA6IHRoaXMpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRo
aXMpOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOworICAgIGV2
ZW50LnNldFRhcmdldCh0YXJnZXQgPyB0YXJnZXQgOiB0aGlzKTsKKyAgICBldmVudC5zZXRDdXJy
ZW50VGFyZ2V0KHRoaXMpOworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdF
VCk7CiAKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93KGZyYW1lKCksICpl
dmVudCwgKnRoaXMpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUg
PSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3coZnJh
bWUoKSwgZXZlbnQsICp0aGlzKTsKIAotICAgIGJvb2wgcmVzdWx0ID0gZmlyZUV2ZW50TGlzdGVu
ZXJzKGV2ZW50LmdldCgpKTsKKyAgICBib29sIHJlc3VsdCA9IGZpcmVFdmVudExpc3RlbmVycyhl
dmVudCk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3BhdGNoRXZlbnRP
bldpbmRvdyhjb29raWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAppbmRleCAwZDhkOTUzNWFi
NzQzZDkyOTY3NWE1YmM0MGIxNDQyOGI4YzUyN2VkLi5iNTAwMWJjZjFiNzA2ZmU3MGViNDhmNGE3
ODcxZTcyNmIyYmExYTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKQEAgLTI0NCw3ICsyNDQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIE5lZWRlZCBmb3IgT2JqZWN0aXZl
LUMgYmluZGluZ3MgKHNlZSBidWcgMjg3NzQpLgogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBNZXNzYWdlUG9ydCosIGNv
bnN0IFN0cmluZyYgdGFyZ2V0T3JpZ2luLCBET01XaW5kb3cmIHNvdXJjZSwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlVGltZXJGaXJlZChQb3N0TWVzc2FnZVRpbWVy
Jik7Ci0gICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRoT3JpZ2luQ2hlY2soU2Vj
dXJpdHlPcmlnaW4qIGludGVuZGVkVGFyZ2V0T3JpZ2luLCBQYXNzUmVmUHRyPEV2ZW50PiwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4pOworICAgICAgICB2b2lkIGRpc3Bh
dGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3VyaXR5T3JpZ2luKiBpbnRlbmRlZFRh
cmdldE9yaWdpbiwgRXZlbnQmLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNr
Pik7CiAKICAgICAgICAgdm9pZCBzY3JvbGxCeShpbnQgeCwgaW50IHkpIGNvbnN0OwogICAgICAg
ICB2b2lkIHNjcm9sbFRvKGludCB4LCBpbnQgeSkgY29uc3Q7CkBAIC0yNzgsNyArMjc4LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsRXZlbnRM
aXN0ZW5lcnMoKSBvdmVycmlkZTsKIAogICAgICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0
Y2hFdmVudDsKLSAgICAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBy
cEV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBUYXJnZXQpOworICAgICAgICBib29s
IGRpc3BhdGNoRXZlbnQoRXZlbnQmLCBFdmVudFRhcmdldCopOwogCiAgICAgICAgIHZvaWQgZGlz
cGF0Y2hMb2FkRXZlbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZp
Y2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5j
cHAKaW5kZXggOTI1NzU0ZWM0MzYxMGU3YTdmNjk5YjY4NDgxNTJlNzJjODVhZjYyMS4uM2MzODQz
MDk1NjM0OTYyMmFlMmUxOWZkNWI3NjAzODVjOTU5MDRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RldmljZUNvbnRyb2xsZXIuY3BwCkBAIC03MSw5ICs3MSw4IEBAIHZvaWQgRGV2aWNlQ29udHJv
bGxlcjo6cmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnMoRE9NV2luZG93KiB3aW5kb3cpCiAg
ICAgICAgIG1fY2xpZW50LT5zdG9wVXBkYXRpbmcoKTsKIH0KIAotdm9pZCBEZXZpY2VDb250cm9s
bGVyOjpkaXNwYXRjaERldmljZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQordm9p
ZCBEZXZpY2VDb250cm9sbGVyOjpkaXNwYXRjaERldmljZUV2ZW50KEV2ZW50JiBldmVudCkKIHsK
LSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CiAgICAgVmVjdG9yPFJlZlB0cjxE
T01XaW5kb3c+PiBsaXN0ZW5lclZlY3RvcjsKICAgICBjb3B5VG9WZWN0b3IobV9saXN0ZW5lcnMs
IGxpc3RlbmVyVmVjdG9yKTsKICAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogbGlzdGVuZXJWZWN0
b3IpIHsKQEAgLTkzLDggKzkyLDEwIEBAIHZvaWQgRGV2aWNlQ29udHJvbGxlcjo6ZmlyZURldmlj
ZUV2ZW50KCkKICAgICBtX2xhc3RFdmVudExpc3RlbmVycy5jbGVhcigpOwogICAgIGZvciAoYXV0
byYgbGlzdGVuZXIgOiBsaXN0ZW5lclZlY3RvcikgewogICAgICAgICBhdXRvIGRvY3VtZW50ID0g
bGlzdGVuZXItPmRvY3VtZW50KCk7Ci0gICAgICAgIGlmIChkb2N1bWVudCAmJiAhZG9jdW1lbnQt
PmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSAmJiAhZG9jdW1lbnQtPmFjdGl2ZURPTU9i
amVjdHNBcmVTdG9wcGVkKCkpCi0gICAgICAgICAgICBsaXN0ZW5lci0+ZGlzcGF0Y2hFdmVudChn
ZXRMYXN0RXZlbnQoKSk7CisgICAgICAgIGlmIChkb2N1bWVudCAmJiAhZG9jdW1lbnQtPmFjdGl2
ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSAmJiAhZG9jdW1lbnQtPmFjdGl2ZURPTU9iamVjdHNB
cmVTdG9wcGVkKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGxhc3RFdmVudCA9IGdldExhc3RF
dmVudCgpKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5kaXNwYXRjaEV2ZW50KCpsYXN0RXZl
bnQpOworICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RldmljZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJv
bGxlci5oCmluZGV4IGZkZjVkMWQ5NmQxNTc3Njc2Y2E5MDlmOTE4OTNjNTdmOTgwOGE1Y2YuLjIx
ODYxZjI0ZTVlNDM4ZTcwMDJkNzlmMTIzZTY4YmNiOWJhMDg4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRGV2aWNlQ29udHJvbGxlci5oCkBAIC00OCwxMiArNDgsMTIgQEAgcHVibGljOgogICAgIHZv
aWQgcmVtb3ZlRGV2aWNlRXZlbnRMaXN0ZW5lcihET01XaW5kb3cqKTsKICAgICB2b2lkIHJlbW92
ZUFsbERldmljZUV2ZW50TGlzdGVuZXJzKERPTVdpbmRvdyopOwogCi0gICAgdm9pZCBkaXNwYXRj
aERldmljZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGRpc3BhdGNoRGV2aWNl
RXZlbnQoRXZlbnQmKTsKICAgICBib29sIGlzQWN0aXZlKCkgeyByZXR1cm4gIW1fbGlzdGVuZXJz
LmlzRW1wdHkoKTsgfQogICAgIERldmljZUNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGll
bnQ7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQoKSB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBSZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIHsgcmV0dXJuIG51
bGxwdHI7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmlyZURldmljZUV2ZW50KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDA1MGI2Mjg5NWFlYTczNjQ5ZDJh
ZTQ2NGU1OWZjNjgzZjFhNmI5ZDAuLmRhYTBmOThmOWMwYTI1NjZlMTA4OWU1MGQ5ZGQ1NjBiOGVk
Zjc3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC00NDYsNyAr
NDQ2LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6ZGlzcGF0Y2hUZXh0SW5wdXRFdmVudEZvcihG
cmFtZSogaW5uZXJGcmFtZSwgRHJhZ0RhdGEmIGRyYWcKICAgICBBU1NFUlQobV9wYWdlLmRyYWdD
YXJldENvbnRyb2xsZXIoKS5oYXNDYXJldCgpKTsKICAgICBTdHJpbmcgdGV4dCA9IG1fcGFnZS5k
cmFnQ2FyZXRDb250cm9sbGVyKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSA/IGVtcHR5U3Ry
aW5nKCkgOiBkcmFnRGF0YS5hc1BsYWluVGV4dCgpOwogICAgIE5vZGUqIHRhcmdldCA9IGlubmVy
RnJhbWUtPmVkaXRvcigpLmZpbmRFdmVudFRhcmdldEZyb20obV9wYWdlLmRyYWdDYXJldENvbnRy
b2xsZXIoKS5jYXJldFBvc2l0aW9uKCkpOwotICAgIHJldHVybiB0YXJnZXQtPmRpc3BhdGNoRXZl
bnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JEcm9wKGlubmVyRnJhbWUtPmRvY3VtZW50KCktPmRvbVdp
bmRvdygpLCB0ZXh0KSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgcmV0dXJuIHRhcmdldC0+ZGlz
cGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3AoaW5uZXJGcmFtZS0+ZG9jdW1lbnQo
KS0+ZG9tV2luZG93KCksIHRleHQpKTsKIH0KIAogYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1
ZGVFZGl0RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKaW5kZXggNjcwZTEzNWYzZDM0ZmQzMzY2ZDM4OGE2ZTkwMDZjNzVjMWVkNGZhMy4uYmY4
ZmJhNzU2MTBiY2MxNTNmMzYwYjJiY2NlYzg3MmFjZTE2MjQxYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcApAQCAtMzAxMiwxMyArMzAxMiwxMyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbml0aWFsS2V5RXZlbnQp
CiAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleURvd25FdmVudCA9IGluaXRpYWxLZXlFdmVu
dDsgICAgCiAgICAgaWYgKGtleURvd25FdmVudC50eXBlKCkgIT0gUGxhdGZvcm1FdmVudDo6UmF3
S2V5RG93bikKICAgICAgICAga2V5RG93bkV2ZW50LmRpc2FtYmlndWF0ZUtleURvd25FdmVudChQ
bGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duLCBiYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKTsKLSAg
ICBSZWZQdHI8S2V5Ym9hcmRFdmVudD4ga2V5ZG93biA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShr
ZXlEb3duRXZlbnQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7CisgICAgUmVm
PEtleWJvYXJkRXZlbnQ+IGtleWRvd24gPSBLZXlib2FyZEV2ZW50OjpjcmVhdGUoa2V5RG93bkV2
ZW50LCBtX2ZyYW1lLmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCkpOwogICAgIGlmIChtYXRjaGVk
QW5BY2Nlc3NLZXkpCiAgICAgICAgIGtleWRvd24tPnNldERlZmF1bHRQcmV2ZW50ZWQodHJ1ZSk7
CiAgICAga2V5ZG93bi0+c2V0VGFyZ2V0KGVsZW1lbnQpOwogCiAgICAgaWYgKGluaXRpYWxLZXlF
dmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6UmF3S2V5RG93bikgewotICAgICAgICBlbGVt
ZW50LT5kaXNwYXRjaEV2ZW50KGtleWRvd24sIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBl
bGVtZW50LT5kaXNwYXRjaEV2ZW50KGtleWRvd24pOwogICAgICAgICAvLyBJZiBmcmFtZSBjaGFu
Z2VkIGFzIGEgcmVzdWx0IG9mIGtleWRvd24gZGlzcGF0Y2gsIHRoZW4gcmV0dXJuIHRydWUgdG8g
YXZvaWQgc2VuZGluZyBhIHN1YnNlcXVlbnQga2V5cHJlc3MgbWVzc2FnZSB0byB0aGUgbmV3IGZy
YW1lLgogICAgICAgICBib29sIGNoYW5nZWRGb2N1c2VkRnJhbWUgPSBtX2ZyYW1lLnBhZ2UoKSAm
JiAmbV9mcmFtZSAhPSAmbV9mcmFtZS5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRP
ck1haW5GcmFtZSgpOwogICAgICAgICByZXR1cm4ga2V5ZG93bi0+ZGVmYXVsdEhhbmRsZWQoKSB8
fCBrZXlkb3duLT5kZWZhdWx0UHJldmVudGVkKCkgfHwgY2hhbmdlZEZvY3VzZWRGcmFtZTsKQEAg
LTMwMjksNyArMzAyOSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkKICAgICAvLyBpbiBvcmRlciB0byBt
YXRjaCBJRToKICAgICAvLyAxLiBwcmV2ZW50aW5nIGRlZmF1bHQgaGFuZGxpbmcgb2Yga2V5ZG93
biBhbmQga2V5cHJlc3MgZXZlbnRzIGhhcyBubyBlZmZlY3Qgb24gSU0gaW5wdXQ7CiAgICAgLy8g
Mi4gaWYgYW4gaW5wdXQgbWV0aG9kIGhhbmRsZXMgdGhlIGV2ZW50LCBpdHMga2V5Q29kZSBpcyBz
ZXQgdG8gMjI5IGluIGtleWRvd24gZXZlbnQuCi0gICAgbV9mcmFtZS5lZGl0b3IoKS5oYW5kbGVJ
bnB1dE1ldGhvZEtleWRvd24oa2V5ZG93bi5nZXQoKSk7CisgICAgbV9mcmFtZS5lZGl0b3IoKS5o
YW5kbGVJbnB1dE1ldGhvZEtleWRvd24oa2V5ZG93bi5wdHIoKSk7CiAgICAgCiAgICAgYm9vbCBo
YW5kbGVkQnlJbnB1dE1ldGhvZCA9IGtleWRvd24tPmRlZmF1bHRIYW5kbGVkKCk7CiAgICAgCkBA
IC0zMDQwLDEwICszMDQwLDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkKICAgICAgICAga2V5ZG93bi0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKGFjY2Vzc2liaWxpdHlQ
cmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oa2V5ZG93bi5nZXQoKSkpCisgICAgaWYgKGFjY2Vzc2li
aWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oa2V5ZG93bikpCiAgICAgICAgIGtleWRvd24t
PnN0b3BQcm9wYWdhdGlvbigpOwogCi0gICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChrZXlkb3du
LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGtleWRvd24p
OwogICAgIC8vIElmIGZyYW1lIGNoYW5nZWQgYXMgYSByZXN1bHQgb2Yga2V5ZG93biBkaXNwYXRj
aCwgdGhlbiByZXR1cm4gZWFybHkgdG8gYXZvaWQgc2VuZGluZyBhIHN1YnNlcXVlbnQga2V5cHJl
c3MgbWVzc2FnZSB0byB0aGUgbmV3IGZyYW1lLgogICAgIGJvb2wgY2hhbmdlZEZvY3VzZWRGcmFt
ZSA9IG1fZnJhbWUucGFnZSgpICYmICZtX2ZyYW1lICE9ICZtX2ZyYW1lLnBhZ2UoKS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYm9vbCBrZXlkb3duUmVzdWx0
ID0ga2V5ZG93bi0+ZGVmYXVsdEhhbmRsZWQoKSB8fCBrZXlkb3duLT5kZWZhdWx0UHJldmVudGVk
KCkgfHwgY2hhbmdlZEZvY3VzZWRGcmFtZTsKQEAgLTMwNjIsMTQgKzMwNjIsMTQgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgaW5pdGlh
bEtleUV2ZW50KQogICAgIGtleVByZXNzRXZlbnQuZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFBs
YXRmb3JtRXZlbnQ6OkNoYXIsIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpOwogICAgIGlmIChr
ZXlQcmVzc0V2ZW50LnRleHQoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBrZXlkb3duUmVz
dWx0OwotICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBrZXlwcmVzcyA9IEtleWJvYXJkRXZlbnQ6
OmNyZWF0ZShrZXlQcmVzc0V2ZW50LCBtX2ZyYW1lLmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCkp
OworICAgIFJlZjxLZXlib2FyZEV2ZW50PiBrZXlwcmVzcyA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0
ZShrZXlQcmVzc0V2ZW50LCBtX2ZyYW1lLmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCkpOwogICAg
IGtleXByZXNzLT5zZXRUYXJnZXQoZWxlbWVudCk7CiAgICAgaWYgKGtleWRvd25SZXN1bHQpCiAg
ICAgICAgIGtleXByZXNzLT5zZXREZWZhdWx0UHJldmVudGVkKHRydWUpOwogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIGtleXByZXNzLT5rZXlwcmVzc0NvbW1hbmRzKCkgPSBrZXlkb3duLT5rZXlw
cmVzc0NvbW1hbmRzKCk7CiAjZW5kaWYKLSAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGtleXBy
ZXNzLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGtleXBy
ZXNzKTsKIAogICAgIHJldHVybiBrZXlkb3duUmVzdWx0IHx8IGtleXByZXNzLT5kZWZhdWx0UHJl
dmVudGVkKCkgfHwga2V5cHJlc3MtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CkBAIC0zMTg2LDcgKzMx
ODYsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVu
dEZvckFjY2Vzc2liaWxpdHkoS2V5Ym9hcmRFdmVudAogICAgIH0KIH0KIAotYm9vbCBFdmVudEhh
bmRsZXI6OmFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVu
dCogZXZlbnQpCitib29sIEV2ZW50SGFuZGxlcjo6YWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQ
cm9wb2dhdGlvbihLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZh
Y2VFbmFibGVkKCkpCkBAIC0zMTk2LDkgKzMxOTYsOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6YWNj
ZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50KiBldmVudCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2sgZm9yIGtleSBldmVudHMgdGhh
dCBhcmUgcmVsZXZhbnQgdG8gYWNjZXNzaWJpbGl0eTogdGFiIGFuZCBhcnJvd3Mga2V5cyB0aGF0
IGNoYW5nZSBmb2N1cwotICAgIGlmIChldmVudC0+a2V5SWRlbnRpZmllcigpID09ICJVKzAwMDki
KQorICAgIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwOSIpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGZvY3VzRGlyZWN0aW9u
Rm9yS2V5KGV2ZW50LT5rZXlJZGVudGlmaWVyKCkpOworICAgIEZvY3VzRGlyZWN0aW9uIGRpcmVj
dGlvbiA9IGZvY3VzRGlyZWN0aW9uRm9yS2V5KGV2ZW50LmtleUlkZW50aWZpZXIoKSk7CiAgICAg
aWYgKGRpcmVjdGlvbiAhPSBGb2N1c0RpcmVjdGlvbk5vbmUpCiAgICAgICAgIHJldHVybiB0cnVl
OwogI2Vsc2UKQEAgLTM0OTQsMTAgKzM0OTQsMTAgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdFdmUK
ICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCkpCiAgICAgICAgIHZpZXct
PmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24oKTsK
IAotICAgIFJlZlB0cjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGUobV9mcmFt
ZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgaW5wdXRUeXBlKTsKKyAgICBSZWY8VGV4
dEV2ZW50PiBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9t
V2luZG93KCksIHRleHQsIGlucHV0VHlwZSk7CiAgICAgZXZlbnQtPnNldFVuZGVybHlpbmdFdmVu
dCh1bmRlcmx5aW5nRXZlbnQpOwogCi0gICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJ
R05PUkVfRVhDRVBUSU9OKTsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAg
IHJldHVybiBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKTsKIH0KICAgICAKQEAgLTM4OTksMTEgKzM4
OTksMTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZv
cm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgICAgIFJlZlB0cjxUb3VjaExpc3Q+IHRhcmdl
dFRvdWNoZXMoaXNUb3VjaENhbmNlbEV2ZW50ID8gZW1wdHlMaXN0IDogdG91Y2hlc0J5VGFyZ2V0
LmdldCh0b3VjaEV2ZW50VGFyZ2V0KSk7CiAgICAgICAgICAgICBBU1NFUlQodGFyZ2V0VG91Y2hl
cyk7CiAKLSAgICAgICAgICAgIFJlZlB0cjxUb3VjaEV2ZW50PiB0b3VjaEV2ZW50ID0KKyAgICAg
ICAgICAgIFJlZjxUb3VjaEV2ZW50PiB0b3VjaEV2ZW50ID0KICAgICAgICAgICAgICAgICBUb3Vj
aEV2ZW50OjpjcmVhdGUoZWZmZWN0aXZlVG91Y2hlcy5nZXQoKSwgdGFyZ2V0VG91Y2hlcy5nZXQo
KSwgY2hhbmdlZFRvdWNoZXNbc3RhdGVdLm1fdG91Y2hlcy5nZXQoKSwKICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVOYW1lLCB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZG9jdW1lbnQoKS5k
ZWZhdWx0VmlldygpLAogICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBldmVudC5jdHJs
S2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBldmVudC5tZXRhS2V5KCkp
OwotICAgICAgICAgICAgdG91Y2hFdmVudFRhcmdldC0+dG9Ob2RlKCktPmRpc3BhdGNoVG91Y2hF
dmVudCh0b3VjaEV2ZW50LmdldCgpKTsKKyAgICAgICAgICAgIHRvdWNoRXZlbnRUYXJnZXQtPnRv
Tm9kZSgpLT5kaXNwYXRjaFRvdWNoRXZlbnQodG91Y2hFdmVudCk7CiAgICAgICAgICAgICBzd2Fs
bG93ZWRFdmVudCA9IHN3YWxsb3dlZEV2ZW50IHx8IHRvdWNoRXZlbnQtPmRlZmF1bHRQcmV2ZW50
ZWQoKSB8fCB0b3VjaEV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggM2Q1NzU4ODRhOWJhODYwN2E3OWE3ZmQ0
N2M3NmQxNzQzMjNiOTM4Ny4uMjQzNWRhMDE1MTE4M2FlNmQzZmFhOTlkZTQ5NzY3MTU3M2E5M2M5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0yNDcsNyArMjQ3LDcgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wga2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXli
b2FyZEV2ZW50Jik7CiAgICAgdm9pZCBkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9h
cmRFdmVudCopOwogCi0gICAgYm9vbCBhY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0
aW9uKEtleWJvYXJkRXZlbnQqKTsKKyAgICBib29sIGFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50
UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaGFu
ZGxlS2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudEZvckFjY2Vzc2liaWxpdHkoS2V5Ym9hcmRFdmVu
dCopOwogCiAgICAgYm9vbCBoYW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBTdHJpbmcmIHRleHQs
IEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQgPSBudWxscHRyLCBUZXh0RXZlbnRJbnB1dFR5cGUgPSBU
ZXh0RXZlbnRJbnB1dEtleWJvYXJkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKaW5k
ZXggOWY5MGIwMWIxNTg1NDA4ZjY2MGQ3YjFkMDBlYzk2ZmM4MTJmYWRiNy4uNGExMDE1MTJkNjg2
NjM4ODYwMGVkNzMyZmMzY2E4NDE2ZjdhNDBiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJj
ZS5jcHAKQEAgLTQxMCwxMSArNDEwLDExIEBAIGJvb2wgRXZlbnRTb3VyY2U6OmNhblN1c3BlbmRG
b3JQYWdlQ2FjaGUoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1JlZlB0cjxN
ZXNzYWdlRXZlbnQ+IEV2ZW50U291cmNlOjpjcmVhdGVNZXNzYWdlRXZlbnQoKQorUmVmPE1lc3Nh
Z2VFdmVudD4gRXZlbnRTb3VyY2U6OmNyZWF0ZU1lc3NhZ2VFdmVudCgpCiB7Ci0gICAgUmVmUHRy
PE1lc3NhZ2VFdmVudD4gZXZlbnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOworICAgIFJlZjxN
ZXNzYWdlRXZlbnQ+IGV2ZW50ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoKTsKICAgICBldmVudC0+
aW5pdE1lc3NhZ2VFdmVudChtX2V2ZW50TmFtZS5pc0VtcHR5KCkgPyBldmVudE5hbWVzKCkubWVz
c2FnZUV2ZW50IDogQXRvbWljU3RyaW5nKG1fZXZlbnROYW1lKSwgZmFsc2UsIGZhbHNlLCBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShTdHJpbmc6OmFkb3B0KG1fZGF0YSkpLCBtX2V2ZW50
U3RyZWFtT3JpZ2luLCBtX2xhc3RFdmVudElkLCAwLCAwKTsKLSAgICByZXR1cm4gZXZlbnQucmVs
ZWFzZSgpOworICAgIHJldHVybiBldmVudDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCmluZGV4IGU0OWQ2OGUyMzdmYjk5ZTYxMGU2ZDZjN2Uz
NmFjOWQzYTRjMjhjNmMuLjFkMjU0NThlZTNkMGJmYWRiMTIzYjAxYmY2ZjlmZWRlMDI0M2RlNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGFib3J0Q29ubmVjdGlvbkF0dGVtcHQoKTsKICAgICB2b2lkIHBhcnNlRXZlbnRT
dHJlYW0oKTsKICAgICB2b2lkIHBhcnNlRXZlbnRTdHJlYW1MaW5lKHVuc2lnbmVkIHBvcywgaW50
IGZpZWxkTGVuZ3RoLCBpbnQgbGluZUxlbmd0aCk7Ci0gICAgUGFzc1JlZlB0cjxNZXNzYWdlRXZl
bnQ+IGNyZWF0ZU1lc3NhZ2VFdmVudCgpOworICAgIFJlZjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZU1l
c3NhZ2VFdmVudCgpOwogCiAgICAgVVJMIG1fdXJsOwogICAgIGJvb2wgbV93aXRoQ3JlZGVudGlh
bHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggMWU3ZmVkNzAxN2FhMmI5ZDIwMWNh
ZDAwMTcxYzkwNjg1YzUzZGM4NC4uMzFhYzMxZTAyZWEyMjU5ZjhlMjg2N2RhN2NmNzVkZTdmMTQz
ZDhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMzE4NCwxNCArMzE4NCwxNCBA
QCB2b2lkIEZyYW1lVmlldzo6c2VuZFJlc2l6ZUV2ZW50SWZOZWVkZWQoKQogICAgIGJvb2wgaXNN
YWluRnJhbWUgPSBmcmFtZSgpLmlzTWFpbkZyYW1lKCk7CiAgICAgYm9vbCBjYW5TZW5kUmVzaXpl
RXZlbnRTeW5jaHJvbm91c2x5ID0gaXNNYWluRnJhbWUgJiYgIW1fc2hvdWxkQXV0b1NpemU7CiAK
LSAgICBSZWZQdHI8RXZlbnQ+IHJlc2l6ZUV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkucmVzaXplRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgUmVmPEV2ZW50PiByZXNpemVFdmVu
dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBmYWxzZSwgZmFsc2Up
OwogICAgIGlmIChjYW5TZW5kUmVzaXplRXZlbnRTeW5jaHJvbm91c2x5KQotICAgICAgICBmcmFt
ZSgpLmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQocmVzaXplRXZlbnQucmVsZWFzZSgp
KTsKKyAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KHJlc2l6
ZUV2ZW50KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gRklYTUU6IFF1ZXVlaW5nIHRoaXMgZXZl
bnQgZm9yIGFuIHVucHJlZGljdGFibGUgdGltZSBpbiB0aGUgZnV0dXJlIHNlZW1zCiAgICAgICAg
IC8vIGludHJpbnNpY2FsbHkgcmFjeS4gQnkgdGhlIHRpbWUgdGhpcyByZXNpemUgZXZlbnQgZmly
ZXMsIHRoZSBmcmFtZSBtaWdodAogICAgICAgICAvLyBiZSByZXNpemVkIGFnYWluLCBzbyB3ZSBj
b3VsZCBlbmQgdXAgd2l0aCB0d28gcmVzaXplIGV2ZW50cyBmb3IgdGhlIHNhbWUgc2l6ZS4KLSAg
ICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1ZXVlV2luZG93RXZlbnQocmVzaXplRXZlbnQu
cmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1ZXVlV2luZG93RXZl
bnQoV1RGOjptb3ZlKHJlc2l6ZUV2ZW50KSk7CiAgICAgfQogCiAgICAgaWYgKEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkgJiYgaXNNYWluRnJhbWUpIHsKQEAgLTMzNzcs
MTEgKzMzNzcsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wg
aG9yaXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmYKICAgICAgICAgbV9ob3Jpem9u
dGFsT3ZlcmZsb3cgPSBob3Jpem9udGFsT3ZlcmZsb3c7CiAgICAgICAgIG1fdmVydGljYWxPdmVy
ZmxvdyA9IHZlcnRpY2FsT3ZlcmZsb3c7CiAKLSAgICAgICAgUmVmUHRyPE92ZXJmbG93RXZlbnQ+
IG92ZXJmbG93RXZlbnQgPSBPdmVyZmxvd0V2ZW50OjpjcmVhdGUoaG9yaXpvbnRhbE92ZXJmbG93
Q2hhbmdlZCwgaG9yaXpvbnRhbE92ZXJmbG93LAorICAgICAgICBSZWY8T3ZlcmZsb3dFdmVudD4g
b3ZlcmZsb3dFdmVudCA9IE92ZXJmbG93RXZlbnQ6OmNyZWF0ZShob3Jpem9udGFsT3ZlcmZsb3dD
aGFuZ2VkLCBob3Jpem9udGFsT3ZlcmZsb3csCiAgICAgICAgICAgICB2ZXJ0aWNhbE92ZXJmbG93
Q2hhbmdlZCwgdmVydGljYWxPdmVyZmxvdyk7CiAgICAgICAgIG92ZXJmbG93RXZlbnQtPnNldFRh
cmdldCh2aWV3cG9ydFJlbmRlcmVyLT5lbGVtZW50KCkpOwogCi0gICAgICAgIGZyYW1lKCkuZG9j
dW1lbnQoKS0+ZW5xdWV1ZU92ZXJmbG93RXZlbnQob3ZlcmZsb3dFdmVudC5yZWxlYXNlKCkpOwor
ICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmVucXVldWVPdmVyZmxvd0V2ZW50KFdURjo6bW92
ZShvdmVyZmxvd0V2ZW50KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAppbmRleCA5M2M3MDZjMDcwNDViYjZiYjllNTRjODk1YzY1ZDAzNjk2MWY1
ZGQ2Li5jNjFjYzhiNjdkMzJlYjNmMjQ2Y2JmNWYxMGNhOWM5NzZmZjhkNzIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE2OSw5ICsxNjksOSBAQCBwdWJs
aWM6CiAgICAgICAgIGlmICghaG9yaXpvbnRhbExheW91dE92ZXJmbG93Q2hhbmdlZCAmJiAhdmVy
dGljYWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgUmVmUHRyPE92ZXJmbG93RXZlbnQ+IG92ZXJmbG93RXZlbnQgPSBPdmVyZmxvd0V2ZW50Ojpj
cmVhdGUoaG9yaXpvbnRhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzSG9yaXpvbnRhbExheW91
dE92ZXJmbG93LCB2ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzVmVydGljYWxMYXlv
dXRPdmVyZmxvdyk7CisgICAgICAgIFJlZjxPdmVyZmxvd0V2ZW50PiBvdmVyZmxvd0V2ZW50ID0g
T3ZlcmZsb3dFdmVudDo6Y3JlYXRlKGhvcml6b250YWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQsIGhh
c0hvcml6b250YWxMYXlvdXRPdmVyZmxvdywgdmVydGljYWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQs
IGhhc1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3cpOwogICAgICAgICBvdmVyZmxvd0V2ZW50LT5zZXRU
YXJnZXQobV9ibG9jay0+ZWxlbWVudCgpKTsKLSAgICAgICAgbV9ibG9jay0+ZG9jdW1lbnQoKS5l
bnF1ZXVlT3ZlcmZsb3dFdmVudChvdmVyZmxvd0V2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIG1f
YmxvY2stPmRvY3VtZW50KCkuZW5xdWV1ZU92ZXJmbG93RXZlbnQoV1RGOjptb3ZlKG92ZXJmbG93
RXZlbnQpKTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJFdmVudFF1ZXVlLmNwcAppbmRleCAwNzIxMDc2OWZkMDZiYTljZTg3YWM0NjUyYzk5ZTJjMTc4
ZDI4NGYxLi43ZWI1OGEyNmE0OGZmNzBlZmY5ZTVmNTUzZDU2ZTQwOGZiMWYyMmM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKQEAgLTQ5LDggKzQ5LDgg
QEAgV29ya2VyRXZlbnRRdWV1ZTo6fldvcmtlckV2ZW50UXVldWUoKQogY2xhc3MgV29ya2VyRXZl
bnRRdWV1ZTo6RXZlbnREaXNwYXRjaGVyCiB7CiBwdWJsaWM6Ci0gICAgRXZlbnREaXNwYXRjaGVy
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBXb3JrZXJFdmVudFF1ZXVlJiBldmVudFF1ZXVlKQot
ICAgICAgICA6IG1fZXZlbnQoZXZlbnQpCisgICAgRXZlbnREaXNwYXRjaGVyKFJlZlB0cjxFdmVu
dD4mJiBldmVudCwgV29ya2VyRXZlbnRRdWV1ZSYgZXZlbnRRdWV1ZSkKKyAgICAgICAgOiBtX2V2
ZW50KFdURjo6bW92ZShldmVudCkpCiAgICAgICAgICwgbV9ldmVudFF1ZXVlKGV2ZW50UXVldWUp
CiAgICAgICAgICwgbV9pc0NhbmNlbGxlZChmYWxzZSkKICAgICB7CkBAIC02Nyw3ICs2Nyw3IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKG1faXNDYW5jZWxsZWQpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIG1fZXZlbnRRdWV1ZS5tX2V2ZW50RGlzcGF0Y2hlck1hcC5yZW1vdmUobV9ldmVu
dC5nZXQoKSk7Ci0gICAgICAgIG1fZXZlbnQtPnRhcmdldCgpLT5kaXNwYXRjaEV2ZW50KG1fZXZl
bnQpOworICAgICAgICBtX2V2ZW50LT50YXJnZXQoKS0+ZGlzcGF0Y2hFdmVudCgqbV9ldmVudCk7
CiAgICAgICAgIG1fZXZlbnQgPSBudWxscHRyOwogICAgIH0KIApAQCAtODMsMTMgKzgzLDEzIEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ2FuY2VsbGVkOwogfTsKIAotYm9vbCBXb3JrZXJFdmVu
dFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIFdvcmtl
ckV2ZW50UXVldWU6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgaWYg
KG1faXNDbG9zZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEV2ZW50RGlzcGF0Y2hl
ciogZXZlbnREaXNwYXRjaGVyUHRyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcihldmVudC5nZXQoKSwg
KnRoaXMpOwotICAgIG1fZXZlbnREaXNwYXRjaGVyTWFwLmFkZChldmVudCwgZXZlbnREaXNwYXRj
aGVyUHRyKTsKKyAgICBFdmVudERpc3BhdGNoZXIqIGV2ZW50RGlzcGF0Y2hlclB0ciA9IG5ldyBF
dmVudERpc3BhdGNoZXIoZXZlbnQuY29weVJlZigpLCAqdGhpcyk7CisgICAgbV9ldmVudERpc3Bh
dGNoZXJNYXAuYWRkKGV2ZW50LnB0cigpLCBldmVudERpc3BhdGNoZXJQdHIpOwogICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5wb3N0VGFzayhbZXZlbnREaXNwYXRjaGVyUHRyXSAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEV2ZW50RGlzcGF0
Y2hlcj4gZXZlbnREaXNwYXRjaGVyKGV2ZW50RGlzcGF0Y2hlclB0cik7CiAgICAgICAgIGV2ZW50
RGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyRXZlbnRRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVu
dFF1ZXVlLmgKaW5kZXggOWEwNTc1NjgxMTkyOTIzMGI0YmVlNTc4MGRlYzg0MTlkNTVhMjQ3ZS4u
M2RiZjMzZGIzOGI3Yzc5MzMxOGRiYmYxZTQ4NDk0ZjA0MjZlY2I3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IFdvcmtlckV2ZW50UXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwog
ICAgIHZpcnR1YWwgfldvcmtlckV2ZW50UXVldWUoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBlbnF1
ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBl
bnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Y2VsRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSBvdmVy
cmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudFRocm90dGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKaW5kZXggYWIxNzA4ZmU0NDI1ZDAxZjY1MTU4Mzkz
MzU0N2Q5YzljN2RiNmUxZC4uYzNlMTUzOGI0MjZjZTM1NjU4YzA4YjMxMmQ4ZmM5MTkwNTk5MGE0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudFRocm90dGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCkBAIC04MSwyNSArODEsMjQgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hUaHJvdHRsZWRQcm9ncmVzc0V2
ZW50KGJvb2wgbGUKICAgICBtX2hhc1Rocm90dGxlZFByb2dyZXNzRXZlbnQgPSB0cnVlOwogfQog
Ci12b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFJlYWR5
U3RhdGVDaGFuZ2VFdmVudChSZWZQdHI8RXZlbnQ+JiYgZXZlbnQsIFByb2dyZXNzRXZlbnRBY3Rp
b24gcHJvZ3Jlc3NFdmVudEFjdGlvbikKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
VGhyb3R0bGU6OmRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KEV2ZW50JiBldmVudCwgUHJv
Z3Jlc3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2ZW50QWN0aW9uKQogewogICAgIGlmIChwcm9ncmVz
c0V2ZW50QWN0aW9uID09IEZsdXNoUHJvZ3Jlc3NFdmVudCkKICAgICAgICAgZmx1c2hQcm9ncmVz
c0V2ZW50KCk7CiAKLSAgICBkaXNwYXRjaEV2ZW50KFdURjo6bW92ZShldmVudCkpOworICAgIGRp
c3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlOjpkaXNwYXRjaEV2ZW50KFJlZlB0cjxFdmVudD4mJiBldmVudCkKK3ZvaWQgWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2
ZW50KQogewotICAgIEFTU0VSVChldmVudCk7CiAgICAgaWYgKG1fZGVmZXJFdmVudHMpIHsKLSAg
ICAgICAgaWYgKG1fZGVmZXJyZWRFdmVudHMuc2l6ZSgpID4gMSAmJiBldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5yZWFkeXN0YXRlY2hhbmdlRXZlbnQgJiYgZXZlbnQtPnR5cGUoKSA9PSBt
X2RlZmVycmVkRXZlbnRzLmxhc3QoKS0+dHlwZSgpKSB7CisgICAgICAgIGlmIChtX2RlZmVycmVk
RXZlbnRzLnNpemUoKSA+IDEgJiYgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5yZWFkeXN0
YXRlY2hhbmdlRXZlbnQgJiYgZXZlbnQudHlwZSgpID09IG1fZGVmZXJyZWRFdmVudHMubGFzdCgp
LT50eXBlKCkpIHsKICAgICAgICAgICAgIC8vIFJlYWR5c3RhdGVjaGFuZ2UgZXZlbnRzIGFyZSBz
dGF0ZS1sZXNzIHNvIGF2b2lkIHJlcGVhdGluZyB0d28gaWRlbnRpY2FsIGV2ZW50cyBpbiBhIHJv
dyBvbiByZXN1bWUuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9k
ZWZlcnJlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2ZW50KSk7CisgICAgICAgIG1fZGVmZXJy
ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKICAgICB9IGVsc2UKLSAgICAgICAgbV90YXJnZXQtPmRp
c3BhdGNoRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CisgICAgICAgIG1fdGFyZ2V0LT5kaXNwYXRj
aEV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJv
dHRsZTo6ZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkKQEAg
LTEyMCw4ICsxMTksNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
OjpmbHVzaFByb2dyZXNzRXZlbnQoKQogewogICAgIGlmIChtX2RlZmVyRXZlbnRzICYmIG1fZGVm
ZXJyZWRQcm9ncmVzc0V2ZW50KSB7CiAgICAgICAgIC8vIE1vdmUgdGhlIHByb2dyZXNzIGV2ZW50
IHRvIHRoZSBxdWV1ZSwgdG8gZ2V0IGl0IGluIHRoZSByaWdodCBvcmRlciBvbiByZXN1bWUuCi0g
ICAgICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50KTsK
LSAgICAgICAgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBudWxscHRyOworICAgICAgICBtX2Rl
ZmVycmVkRXZlbnRzLmFwcGVuZChtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudC5yZWxlYXNlTm9uTnVs
bCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTQ0LDE2ICsxNDIsMTUgQEAgdm9p
ZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hEZWZlcnJlZEV2
ZW50cygpCiAgICAgLy8gVGFrZSBvdmVyIHRoZSBkZWZlcnJlZCBldmVudHMgYmVmb3JlIGRpc3Bh
dGNoaW5nIHRoZW0gd2hpY2ggY2FuIHBvdGVudGlhbGx5IGFkZCBtb3JlLgogICAgIGF1dG8gZGVm
ZXJyZWRFdmVudHMgPSBXVEY6Om1vdmUobV9kZWZlcnJlZEV2ZW50cyk7CiAKLSAgICBSZWZQdHI8
RXZlbnQ+IGRlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50Owot
ICAgIG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50ID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8RXZlbnQ+
IGRlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IFdURjo6bW92ZShtX2RlZmVycmVkUHJvZ3Jlc3NFdmVu
dCk7CiAKICAgICBmb3IgKGF1dG8mIGRlZmVycmVkRXZlbnQgOiBkZWZlcnJlZEV2ZW50cykKLSAg
ICAgICAgZGlzcGF0Y2hFdmVudChkZWZlcnJlZEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRp
c3BhdGNoRXZlbnQoZGVmZXJyZWRFdmVudCk7CiAKICAgICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQg
d2lsbCBiZSBpbiB0aGUgbV9kZWZlcnJlZEV2ZW50cyB2ZWN0b3IgaWYgdGhlIGxvYWQgd2FzIGZp
bmlzaGVkIHdoaWxlIHN1c3BlbmRlZC4KICAgICAvLyBJZiBub3QsIGp1c3Qgc2VuZCB0aGUgbW9z
dCB1cC10by1kYXRlIHByb2dyZXNzIG9uIHJlc3VtZS4KICAgICBpZiAoZGVmZXJyZWRQcm9ncmVz
c0V2ZW50KQotICAgICAgICBkaXNwYXRjaEV2ZW50KFdURjo6bW92ZShkZWZlcnJlZFByb2dyZXNz
RXZlbnQpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqZGVmZXJyZWRQcm9ncmVzc0V2ZW50KTsK
IH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZmlyZWQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50VGhyb3R0bGUuaAppbmRleCAyOWY0ZDY1NWQ4M2QxNmY2MTcwZmQ1NTg3NTZkNWE3NjE5NTA0
ZjAyLi5jMTAwOWU1MGRiOTA4Y2E0MzNjZTQ1ZGY1M2ZlNTA3NGVmYTc3NjA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhy
b3R0bGUuaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+WE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUoKTsKIAogICAgIHZvaWQgZGlzcGF0Y2hUaHJvdHRs
ZWRQcm9ncmVzc0V2ZW50KGJvb2wgbGVuZ3RoQ29tcHV0YWJsZSwgdW5zaWduZWQgbG9uZyBsb25n
IGxvYWRlZCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsKTsKLSAgICB2b2lkIGRpc3BhdGNoUmVh
ZHlTdGF0ZUNoYW5nZUV2ZW50KFJlZlB0cjxFdmVudD4mJiwgUHJvZ3Jlc3NFdmVudEFjdGlvbiA9
IERvTm90Rmx1c2hQcm9ncmVzc0V2ZW50KTsKKyAgICB2b2lkIGRpc3BhdGNoUmVhZHlTdGF0ZUNo
YW5nZUV2ZW50KEV2ZW50JiwgUHJvZ3Jlc3NFdmVudEFjdGlvbiA9IERvTm90Rmx1c2hQcm9ncmVz
c0V2ZW50KTsKICAgICB2b2lkIGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmKTsKIAogICAgIHZvaWQgc3VzcGVuZCgpOwpAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpOwogICAgIHZvaWQgZGlzcGF0Y2hEZWZlcnJlZEV2ZW50
cygpOwogICAgIHZvaWQgZmx1c2hQcm9ncmVzc0V2ZW50KCk7Ci0gICAgdm9pZCBkaXNwYXRjaEV2
ZW50KFJlZlB0cjxFdmVudD4mJik7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KEV2ZW50Jik7CiAK
ICAgICBib29sIGhhc0V2ZW50VG9EaXNwYXRjaCgpIGNvbnN0OwogCkBAIC03NSw3ICs3NSw3IEBA
IHByaXZhdGU6CiAKICAgICBib29sIG1fZGVmZXJFdmVudHM7CiAgICAgUmVmUHRyPEV2ZW50PiBt
X2RlZmVycmVkUHJvZ3Jlc3NFdmVudDsKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9kZWZl
cnJlZEV2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9kZWZlcnJlZEV2ZW50czsKICAg
ICBUaW1lciBtX2Rpc3BhdGNoRGVmZXJyZWRFdmVudHNUaW1lcjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265361</attachid>
            <date>2015-11-11 21:37:08 -0800</date>
            <delta_ts>2015-11-11 21:49:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151158-20151111213703.patch</filename>
            <type>text/plain</type>
            <size>123858</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IwZjM1OGI3ODBmMmMy
MDU2NzM0ODA4ZjBiOTExOTE0ODI4Nzk0Ni4uZDMyOTU0NzA1ZjE4NjQ5M2M4ZWI2ZmZjNzk0YTkx
MGEwMjhkMTZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFz
c1JlZlB0ciB0byBkaXNwYXRjaEV2ZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFzc1JlZlB0ciB0byBkaXNwYXRj
aEV2ZW50KCkgYmVjYXVzZToKKyAgICAgICAgMS4gUGFzc1JlZlB0ciBpcyBsZWdhY3kgYW5kIHNo
b3VsZCBubyBsb25nZXIgYmUgdXNlZAorICAgICAgICAyLiBXZSBkb24ndCBhY3R1YWxseSB0cmFu
c2ZlciBvd25lcnNoaXAgb2YgdGhlIEV2ZW50IHRvIHRoZSBjYWxsZWUKKworICAgICAgICBQYXNz
IGEgQysrIHJlZmVyZW5jZSBpbnN0ZWFkLgorCiAyMDE1LTExLTExICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIGhhbmRsZS4qRXZlbnQgdG8gZGlz
cGF0Y2guKkV2ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlDb250cm9sbGVyLmNwcAppbmRleCBjZjgyYTM1NTI5Y2UzMDgwN2QxNjkwNjllNWQ3YWZj
YjhhNDFiZDllLi4yNTIxNWM5NzA0NmNlOWZlMmJmYWIxZTBiNGQwMWQxNGFiMTM1YjhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxl
ci5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6dXBkYXRlQmF0
dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGEKIAogdm9pZCBC
YXR0ZXJ5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQog
ewotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFs
c2UsIGZhbHNlKTsKKyAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5
cGUsIGZhbHNlLCBmYWxzZSk7CiAgICAgUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnkgPSBi
YXR0ZXJ5U3RhdHVzOwogICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycykKICAg
ICAgICAgbGlzdGVuZXItPmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoZXZlbnQsIGJhdHRlcnkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAK
aW5kZXggM2MxZWE3NzQ1NmY0ZDJhOTY3NzdlNDlkYzY1MDExNGEyODY2NWY2Mi4uZDZkMTgwZTg1
NTYwYWNkM2Y3Yzc5Y2I1NTc3NGE4MDQxMDc5YzJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIGRv
dWJsZSBCYXR0ZXJ5TWFuYWdlcjo6bGV2ZWwoKQogICAgIHJldHVybiBtX2JhdHRlcnlTdGF0dXMg
PyBtX2JhdHRlcnlTdGF0dXMtPmxldmVsKCkgOiAxOwogfQogCi12b2lkIEJhdHRlcnlNYW5hZ2Vy
OjpkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVm
UHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMpCit2b2lkIEJhdHRlcnlNYW5hZ2VyOjpk
aWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKEV2ZW50JiBldmVudCwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3Rh
dHVzPiBiYXR0ZXJ5U3RhdHVzKQogewogICAgIHVwZGF0ZUJhdHRlcnlTdGF0dXMoYmF0dGVyeVN0
YXR1cyk7CiAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oCmluZGV4IDc5YTAxZjkzNjliMDYzOTg4ZjZi
YzI3YzY5NjhjNzU1NGU4Y2RkYWYuLmQ0ZTNkMjYxNWUyNjEyMDg0NzA1YWQ2MmI1MWNiNTMyYTA4
YzI5MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5
TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFu
YWdlci5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgZGlzY2hhcmdpbmdU
aW1lKCk7CiAgICAgZG91YmxlIGxldmVsKCk7CiAKLSAgICB2b2lkIGRpZENoYW5nZUJhdHRlcnlT
dGF0dXMoUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworICAg
IHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhFdmVudCYsIFBhc3NSZWZQdHI8QmF0dGVyeVN0
YXR1cz4pOwogICAgIHZvaWQgdXBkYXRlQmF0dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEJhdHRlcnlT
dGF0dXM+KTsKICAgICB2b2lkIGJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCkgeyBtX2JhdHRl
cnlDb250cm9sbGVyID0gbnVsbHB0cjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBiODhlZGU1OGQ4
MWU0MDZjODAyZTUzZThhNDE4NzQ5YmQxMzM3YTk5Li5mODFmMzY1ODJkN2RiZmY1MjVlOGNlODdi
OWYwNTczODI3MWI0ODFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTM2LDMwICszNiwzMCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChF
dmVudCogZXZlbnQsIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYgZXZlbnRUYXJnZXRzKQor
Ym9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50JiBldmVudCwgVmVjdG9yPFJl
ZlB0cjxFdmVudFRhcmdldD4+JiBldmVudFRhcmdldHMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBl
dmVudFRhcmdldHMuc2l6ZSgpOwogICAgIEFTU0VSVChzaXplKTsKIAotICAgIGV2ZW50LT5zZXRF
dmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOworICAgIGV2ZW50LnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7CiAgICAgZm9yIChzaXplX3QgaSA9IHNpemUgLSAx
OyBpOyAtLWkpIHsgLy8gRG9uJ3QgZG8gdGhlIGZpcnN0IGVsZW1lbnQuCi0gICAgICAgIGV2ZW50
LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1tpXS5nZXQoKSk7CisgICAgICAgIGV2ZW50
LnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKICAgICAgICAgZXZlbnRU
YXJnZXRzW2ldLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwotICAgICAgICBpZiAoZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBpZiAoZXZlbnQucHJvcGFnYXRpb25TdG9w
cGVkKCkpCiAgICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKICAgICB9CiAKLSAgICBl
dmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKLSAgICBldmVudC0+c2V0Q3Vy
cmVudFRhcmdldChldmVudFRhcmdldHNbMF0uZ2V0KCkpOworICAgIGV2ZW50LnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChldmVudFRh
cmdldHNbMF0uZ2V0KCkpOwogICAgIGV2ZW50VGFyZ2V0c1swXS0+ZmlyZUV2ZW50TGlzdGVuZXJz
KGV2ZW50KTsKLSAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8ICFldmVudC0+
YnViYmxlcygpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICBpZiAoZXZlbnQucHJvcGFn
YXRpb25TdG9wcGVkKCkgfHwgIWV2ZW50LmJ1YmJsZXMoKSB8fCBldmVudC5jYW5jZWxCdWJibGUo
KSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKLSAgICBldmVudC0+c2V0RXZlbnRQ
aGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkJVQkJMSU5HX1BIQVNFKTsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsr
aSkgeyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgZXZlbnQtPnNldEN1
cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnQuc2V0Q3Vy
cmVudFRhcmdldChldmVudFRhcmdldHNbaV0uZ2V0KCkpOwogICAgICAgICBldmVudFRhcmdldHNb
aV0tPmZpcmVFdmVudExpc3RlbmVycyhldmVudCk7Ci0gICAgICAgIGlmIChldmVudC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQorICAgICAgICBpZiAoZXZl
bnQucHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZlbnQuY2FuY2VsQnViYmxlKCkpCiAgICAgICAg
ICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKICAgICB9CiAKQEAgLTgyLDkgKzgyLDkgQEAgYm9v
bCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50KiBldmVudCwgVmVjdG9yPFJlZlB0
cjxFdmVudFRhcmdldD4+JiBldmUKICAgICAvLyAgICAgICAgZXZlbnQgb24gdGhlIHdpbmRvdyB1
bnRpbCB0aGF0IGhhcyBiZWVuIGltcGxlbWVudGVkKS4iIC0tIEpvbmFzIFNpY2tpbmcKIAogZG9u
ZURpc3BhdGNoaW5nOgotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOwotICAg
IGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOwotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2
ZW50ZWQoKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOworICAgIGV2ZW50
LnNldEV2ZW50UGhhc2UoMCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggYTQ2MzkzZWQ4NmM0
YTYxZTU2OTY0NWM5NmM5MWM1NTA4MjY0ZWZmZi4uZWQ1OTU5NzVhY2I2NWFkNjcyZjUyODk5YWQw
MmYzYWYzZjMzNTAwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgRXZlbnRU
YXJnZXQ7CiAKIGNsYXNzIElEQkV2ZW50RGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IGJvb2wgZGlzcGF0Y2goRXZlbnQqLCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4mKTsgLy8g
VGhlIHRhcmdldCBmaXJzdCBhbmQgdGhlbiBpdHMgYW5jZXN0b3JzIGluIG9yZGVyIG9mIGhvdyB0
aGUgZXZlbnQgYnViYmxlcy4KKyAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaChFdmVudCYsIFZlY3Rv
cjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFuZCB0aGVuIGl0
cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgogCiBwcml2YXRl
OgogICAgIElEQkV2ZW50RGlzcGF0Y2hlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAppbmRleCBk
YmUwMDBmNTcxNGFlMjg4ZjA2MzQ4MjNlYzYzNWZmMTg0NGM4MWIzLi42MWIxNzdjODk4OGZkNzYz
ZmVkODIyNDE4ZDEzMGY2OTk1NDI3OTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtMzMx
LDcgKzMzMSw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQodWlu
dDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKICAgICAKICAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gSURC
VmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUoY3VycmVudFZlcnNpb24sIHJlcXVlc3RlZFZlcnNp
b24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpOwogICAgIGV2ZW50LT5zZXRUYXJn
ZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5x
dWV1ZUV2ZW50KGFkb3B0UmVmKCZldmVudC5sZWFrUmVmKCkpKTsKKyAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7
CiB9CiAKIHZvaWQgSURCRGF0YWJhc2U6OmRpZENyZWF0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRl
eEluZm8mIGluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcAppbmRleCA3NWI5NjVkOTBkMDE5ZTBmNTY4
YzQzYzdmZDhmOTVjMTFjOWVlZWVjLi45OGFlYWQ1ZTlkMTVmYTE2ZmFhNjdhZjhiMTMyNjFmYWNl
MmY5ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKQEAgLTE5NCwxNiArMTk0LDE0IEBAIHZvaWQg
SURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoJmV2ZW50LmdldCgpKTsKKyAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjpt
b3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVu
dCYgZXZlbnQpCiB7Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZl
bnQgLSAlcyIsIHBycEV2ZW50LT50eXBlKCkuY2hhcmFjdGVyczgoKSk7CisgICAgTE9HKEluZGV4
ZWREQiwgIklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQgLSAlcyIsIGV2ZW50LnR5cGUoKS5jaGFy
YWN0ZXJzOCgpKTsKIAotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKLQotICAg
IGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgaWYg
KGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQogICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKIAogICAgIFZlY3RvcjxSZWZQ
dHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOwpAQCAtMjE3LDcgKzIxNSw3IEBAIGJvb2wgSURCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBib29s
IGRvbnRQcmV2ZW50RGVmYXVsdDsKICAgICB7CiAgICAgICAgIFRyYW5zYWN0aW9uQWN0aXZhdG9y
IGFjdGl2YXRvcihtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgZG9udFByZXZlbnREZWZh
dWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7
CisgICAgICAgIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2goZXZlbnQsIHRhcmdldHMpOwogICAgIH0KIAogICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJSZXF1ZXN0SW1wbC5oCmluZGV4IGE0MmIxN2I0NDNjNDFjODNjYThlZjlkNmVkNDAy
MzM4ZjQyNjkyYzguLjI5MGUzOWM1YmQzYzk2YzYxOGM1OThmZjg0MDg0MDA1M2ZjMDNmNDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1
ZXN0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJSZXF1ZXN0SW1wbC5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZD
b3VudGVkPElEQlJlcXVlc3Q+OjpkZXJlZjsKIAogICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxF
dmVudD4mJik7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50
Jikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rp
b24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNw
cAppbmRleCAwZGMxYzRmNThlNDYyMjllYzE3YjUxNWIwMWIzMWQ2MmJlNDZjMDYwLi40YTQ3MTk0
YzM0OTk5MzkwYTdjOTdiYWY0MjNiZTRlN2E5ZDEwZmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25J
bXBsLmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmZpcmVPbkFi
b3J0KCkKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJvcnRF
dmVudCwgdHJ1ZSwgZmFsc2UpKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2
ZW50KFJlZjxFdmVudD4gZXZlbnQpCit2b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQo
UmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIEFTU0VSVChtX3N0YXRlICE9IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQpOwogCkBAIC0zNTQsMjIgKzM1NCwyMiBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiBldmVudCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoJmV2ZW50LmdldCgpKTsKKyAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RG
Ojptb3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2
ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmRpc3BhdGNoRXZlbnQiKTsKIAogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09
IHRoaXMpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRl
RXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKIAogICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOwogICAgIHRhcmdldHMuYXBwZW5k
KHRoaXMpOwogICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOwogCi0gICAgcmV0dXJuIElEQkV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAgIHJldHVybiBJ
REJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LCB0YXJnZXRzKTsKIH0KIAogUmVmPElE
Qk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IGIzZDdi
M2NjMzY2ZDU4YWE3YTQ0YTE4ZDMyYTc3NjlkYjZlN2Q1MWMuLjA0MzYxOTU5MGMyNjcxNDFhMDc3
MzVkNWMxZDdiMTkxMDI3NjkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTcxLDcg
KzcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJy
aWRlIGZpbmFsIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgp
IG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYoKTsgfQogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNw
YXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVu
dCYpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBhY3RpdmVET01P
YmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCBib29sIGNhblN1
c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKQEAgLTEyOCw3ICsxMjgs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaXJlT25Db21wbGV0ZSgpOwogICAgIHZvaWQgZmly
ZU9uQWJvcnQoKTsKLSAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+KTsKKyAgICB2b2lk
IGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOwogCiAgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVl
c3RJbmRleFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJbmRleGVk
REI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0
YWJhc2UuY3BwCmluZGV4IGIwMTRlNjYyMWQyMGQxMTNjMWM3MTRjMzFhNzFkOTZmODMxZjg0MmQu
LmQwM2YxMjhjZDMxMWVkMjI5YmRjMzRjN2MwMWU1Y2UwZTExYjY3Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFi
YXNlLmNwcApAQCAtOTIsNyArOTIsNyBAQCBMZWdhY3lEYXRhYmFzZTo6fkxlZ2FjeURhdGFiYXNl
KCkKICAgICAgICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9u
dGVuZCBjb25uZWN0aW9uIGlzIGJlaW5nCiAgICAgICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBj
b3VsZCBmaXJlLgogICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykK
LSAgICAgICAgICAgIGNvbnRleHQtPmV2ZW50UXVldWUoKS5jYW5jZWxFdmVudCgqZXZlbnQpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXZlbnRRdWV1ZSgpLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAg
ICB9CiB9CiAKQEAgLTMyMSw3ICszMjEsNyBAQCB2b2lkIExlZ2FjeURhdGFiYXNlOjpjbG9zZUNv
bm5lY3Rpb24oKQogICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZlcnNpb24sIGJ1dCB0aGUg
ZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZwogICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBj
b3VsZCBmaXJlLgogICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7Ci0g
ICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKKyAg
ICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudChldmVudCk7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAgICAgfQogCkBAIC0zNDEsMjUg
KzM0MSwyNSBAQCB2b2lkIExlZ2FjeURhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UodWludDY0X3Qg
b2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKICAgICBlbnF1ZXVlRXZlbnQoTGVnYWN5
VmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgZXZlbnRO
YW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCkpOwogfQogCi12b2lkIExlZ2FjeURhdGFiYXNlOjpl
bnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIExlZ2FjeURhdGFiYXNl
OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIEFTU0VSVCghbV9jb250
ZXh0U3RvcHBlZCk7CiAgICAgQVNTRVJUKCFtX2lzQ2xvc2VkKTsKICAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5n
ZXQoKSk7Ci0gICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5jb3B5UmVm
KCkpOworICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkpOwogfQog
Ci1ib29sIExlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQorYm9vbCBMZWdhY3lEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudCIpOwot
ICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZl
bnQpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFu
Z2VFdmVudCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2
ZW50LmdldCgpKQorICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5wdHIoKSA9PSAmZXZl
bnQpCiAgICAgICAgICAgICBtX2VucXVldWVkRXZlbnRzLnJlbW92ZShpKTsKICAgICB9Ci0gICAg
cmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKKyAgICByZXR1
cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiBpbnQ2NF90IExlZ2Fj
eURhdGFiYXNlOjpmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5
RGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdh
Y3lEYXRhYmFzZS5oCmluZGV4IDExMzdlNWUzMDAyNDQxODFlMjE4ZTQ5ZjNkNTdiYjdjZDU4ZTY3
N2QuLmVhMWViNWYyM2RhMGY1NjZkOTYzMzY4YTY4YmMzMWFmNDRmZGIyNjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRh
YmFzZS5oCkBAIC04NCwxMCArODQsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNDbG9zZVBlbmRp
bmcoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlUGVuZGluZzsgfQogICAgIHZvaWQgZm9yY2VDbG9z
ZSgpOwogICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX21ldGFkYXRhOyB9Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAKICAgICB1c2luZyBF
dmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIGludDY0X3QgZmluZE9iamVjdFN0b3JlSWQo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAK
ICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9uY2hhbmdlIGV2ZW50cyB3YWl0aW5nIHRv
IGJlIGZpcmVkIG9uIHRoaXMKICAgICAvLyBkYXRhYmFzZSBzbyB0aGF0IHdlIGNhbiBjYW5jZWwg
dGhlbSBpZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBt
X2VucXVldWVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX2VucXVldWVkRXZlbnRz
OwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcAppbmRleCAzMjkwYzUwZjA0MmU5MGVm
MmVhYmE3Mjc1ODBlNzIzOTM0ODI2NTZkLi43MjE3YmMzZTRkYTcyYmM2YjRjNzZlZWQ5NWFmNzcx
NWM0NjFhZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwCkBAIC0xMzgsMTEgKzEz
OCwxMSBAQCBib29sIExlZ2FjeU9wZW5EQlJlcXVlc3Q6OnNob3VsZEVucXVldWVFdmVudCgpIGNv
bnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5T3BlbkRCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgTGVnYWN5T3BlbkRCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgLy8gSWYgdGhlIGNvbm5l
Y3Rpb24gY2xvc2VkIGJldHdlZW4gb25VcGdyYWRlTmVlZGVkIGFuZCB0aGUgZGVsaXZlcnkgb2Yg
dGhlICJzdWNjZXNzIiBldmVudCwKICAgICAvLyBhbiAiZXJyb3IiIGV2ZW50IHNob3VsZCBiZSBm
aXJlZCBpbnN0ZWFkLgotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQgJiYgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkRhdGFiYXNl
ICYmIG1fcmVzdWx0LT5sZWdhY3lEYXRhYmFzZSgpLT5pc0Nsb3NlUGVuZGluZygpKSB7CisgICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50ICYmIG1fcmVzdWx0
LT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSAmJiBtX3Jlc3VsdC0+bGVnYWN5
RGF0YWJhc2UoKS0+aXNDbG9zZVBlbmRpbmcoKSkgewogICAgICAgICBtX3Jlc3VsdCA9IG51bGxw
dHI7CiAgICAgICAgIG9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4iKSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCmluZGV4IDVhNTkz
YjVmNmVhYzcwZGI3ZDMwMmIwNmU4OWNlYmUzODQ4ZGU0NWYuLjY0ZjY2YzQwYjA3ODMzNTY3MWEz
YWI4ZGI4YjlkZTdiZGNhY2JhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaApAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgRXZl
bnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSBm
aW5hbDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikg
b3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBv
dmVycmlkZSBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbnF1
ZXVlRXZlbnQoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcAppbmRleCBhM2MyMDIw
YjAwMGI3MzRlZDZjYTdhMzNlZTM5NmVkODhhOGVlNTFjLi4yYzc0N2E1NmFhYWQ1M2NmN2Q0ZDNh
M2RkMDg0ZjhkNWYzMmE5YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCkBAIC0xNjYsNyArMTY2LDcg
QEAgdm9pZCBMZWdhY3lSZXF1ZXN0OjphYm9ydCgpCiAKICAgICBFdmVudFF1ZXVlJiBldmVudFF1
ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CiAgICAgZm9yIChh
dXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKLSAgICAgICAgYm9vbCByZW1vdmVkID0g
ZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOworICAgICAgICBib29sIHJlbW92ZWQgPSBl
dmVudFF1ZXVlLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1v
dmVkLCByZW1vdmVkKTsKICAgICB9CiAgICAgbV9lbnF1ZXVlZEV2ZW50cy5jbGVhcigpOwpAQCAt
MjYyLDcgKzI2Miw3IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6b25FcnJvcihQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yKQogICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPEV2ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQorc3RhdGljIFJlZjxFdmVudD4gY3JlYXRl
U3VjY2Vzc0V2ZW50KCkKIHsKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
c3VjY2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2UpOwogfQpAQCAtNDY2LDcgKzQ2Niw3IEBAIEV2ZW50
VGFyZ2V0SW50ZXJmYWNlIExlZ2FjeVJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3QKICAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAot
Ym9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQorYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQiKTsKICAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nKTsKQEAg
LTQ3NCwxNiArNDc0LDE2IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZpdHkpOwog
ICAgIEFTU0VSVChtX2VucXVldWVkRXZlbnRzLnNpemUoKSk7CiAgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsK
LSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVhZHlTdGF0ZSA8IElEQlJlcXVlc3RSZWFkeVN0
YXRlOjpEb25lLCAiV2hlbiBkaXNwYXRjaGluZyBldmVudCAlcywgbV9yZWFkeVN0YXRlIDwgRE9O
RSglZCksIHdhcyAlZCIsIGV2ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSksIHN0YXRpY19jYXN0PGlu
dD4obV9yZWFkeVN0YXRlKSk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZWFkeVN0YXRlIDwgSURCUmVxdWVzdFJlYWR5U3Rh
dGU6OkRvbmUsICJXaGVuIGRpc3BhdGNoaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgPCBET05F
KCVkKSwgd2FzICVkIiwgZXZlbnQudHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRp
Y19jYXN0PGludD4oSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpLCBzdGF0aWNfY2FzdDxpbnQ+
KG1fcmVhZHlTdGF0ZSkpOwogCiAgICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3Jl
cXVlc3RTdGF0ZSk7CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxv
Y2tlZEV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRF
dmVudCkKICAgICAgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0
KCkpCisgICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLnB0cigpID09ICZldmVudCkKICAg
ICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwogICAgIH0KIApAQCAtNTAwLDcg
KzUwMCw3IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKIAogICAgIC8vIEN1cnNvciBwcm9wZXJ0aWVzIHNob3VsZCBub3QgdXBkYXRl
ZCB1bnRpbCB0aGUgc3VjY2VzcyBldmVudCBpcyBiZWluZyBkaXNwYXRjaGVkLgogICAgIFJlZlB0
cjxMZWdhY3lDdXJzb3I+IGN1cnNvclRvTm90aWZ5OwotICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpIHsKICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBnZXRS
ZXN1bHRDdXJzb3IoKTsKICAgICAgICAgaWYgKGN1cnNvclRvTm90aWZ5KSB7CiAgICAgICAgICAg
ICBjdXJzb3JUb05vdGlmeS0+c2V0VmFsdWVSZWFkeShyZXF1ZXN0U3RhdGUoKSwgbV9jdXJzb3JL
ZXkucmVsZWFzZSgpLCBtX2N1cnNvclByaW1hcnlLZXkucmVsZWFzZSgpLCBtX2N1cnNvclZhbHVl
KTsKQEAgLTUwOCwxOSArNTA4LDE5IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpIHsKKyAgICBp
ZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpIHsKICAg
ICAgICAgQVNTRVJUKCFtX2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQpOwogICAgICAgICBtX2Rp
ZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQgPSB0cnVlOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBX
aGVuIHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5
IG5lZWQgdG8gY2hhbmdlLgotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmVycm9yRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2
ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCwg
ImV2ZW50IHR5cGUgd2FzICVzIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICBjb25zdCBib29sIHNldFRyYW5zYWN0aW9uQWN0aXZlID0gbV90cmFuc2FjdGlvbiAm
JiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCB8fCAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBtX2Vycm9yQ29kZSAhPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxv
Y2tlZEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2
ZW50LCAiZXZlbnQgdHlwZSB3YXMgJXMiLCBldmVudC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgY29uc3QgYm9vbCBzZXRUcmFuc2FjdGlvbkFjdGl2ZSA9IG1fdHJhbnNhY3Rp
b24gJiYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50IHx8IChldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgbV9lcnJvckNvZGUgIT0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIAogICAgIGlmIChzZXRUcmFuc2FjdGlvbkFjdGl2
ZSkKICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0QWN0aXZlKHRydWUpOwogCi0gICAgYm9vbCBk
b250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50Lmdl
dCgpLCB0YXJnZXRzKTsKKyAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogCiAgICAgaWYgKG1fdHJhbnNhY3Rp
b24pIHsKICAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6
RG9uZSkKQEAgLTUyOCw3ICs1MjgsNyBAQCBib29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAgICAgLy8gUG9zc2libHkgYWJvcnQg
dGhlIHRyYW5zYWN0aW9uLiBUaGlzIG11c3Qgb2NjdXIgYWZ0ZXIgdW5yZWdpc3RlcmluZyAoc28g
dGhpcyByZXF1ZXN0CiAgICAgICAgIC8vIGRvZXNuJ3QgcmVjZWl2ZSBhIHNlY29uZCBlcnJvcikg
YW5kIGJlZm9yZSBkZWFjdGl2YXRpbmcgKHdoaWNoIG1pZ2h0IHRyaWdnZXIgY29tbWl0KS4KLSAg
ICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9u
dFByZXZlbnREZWZhdWx0ICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7CisgICAgICAgIGlmIChldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9udFByZXZlbnREZWZhdWx0
ICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRF
cnJvcihtX2Vycm9yLCBtX2Vycm9yTWVzc2FnZSk7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9u
LT5hYm9ydChJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgfQpAQCAtNTQxLDcgKzU0MSw3IEBA
IGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpCiAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5wb3N0
U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOwogCi0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJREJS
ZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSAmJiAoIWN1cnNvclRvTm90aWZ5IHx8IG1fY3Vyc29yRmlu
aXNoZWQpICYmIGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVu
dCkKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lICYm
ICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JGaW5pc2hlZCkgJiYgZXZlbnQudHlwZSgpICE9
IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpCiAgICAgICAgIG1faGFzUGVuZGluZ0Fj
dGl2aXR5ID0gZmFsc2U7CiAKICAgICByZXR1cm4gZG9udFByZXZlbnREZWZhdWx0OwpAQCAtNTY1
LDcgKzU2NSw3IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6dHJhbnNhY3Rpb25EaWRGaW5pc2hBbmRE
aXNwYXRjaCgpCiAgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRp
bmc7CiB9CiAKLXZvaWQgTGVnYWN5UmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQordm9pZCBMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYm
IGV2ZW50KQogewogICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3Rh
dGU6OlBlbmRpbmcgfHwgbV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25l
KTsKIApAQCAtNTc2LDggKzU3Niw4IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6ZW5xdWV1ZUV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsK
IAotICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVl
RXZlbnQoZXZlbnQuZ2V0KCkpKQotICAgICAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVuZChldmVu
dCk7CisgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVl
dWVFdmVudChldmVudC5jb3B5UmVmKCkpKQorICAgICAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVu
ZChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVl
c3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1
ZXN0LmgKaW5kZXggNWFlZmIxMWQyMjgyYzc3ODFmYTZmOWQ2ODY3ZTY4ODU2ZjU3OTgzMS4uZWIx
ZmJhZWYyYWU2MjY1ZTMyMTdiYmFjZTVmMWMwN2U1ZmQxYmNiYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oCkBA
IC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRp
b25JbkV2ZW50SGFuZGxlcigpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdXNpbmcgRXZlbnRUYXJn
ZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2
ZW50Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHRyYW5zYWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0
Y2goKTsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIExl
Z2FjeVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIExlZ2FjeVRyYW5zYWN0aW9u
Kik7Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQg
ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAgICAgdmlydHVhbCBib29sIHNob3VsZEVucXVl
dWVFdmVudCgpIGNvbnN0OwogICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKICAgICB2b2lkIG9uU3VjY2Vzc0ludGVybmFsKGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CkBAIC0xMzksNyArMTM5LDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7CiAKICAg
ICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5OwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBt
X2VucXVldWVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX2VucXVldWVkRXZlbnRz
OwogCiAgICAgLy8gT25seSB1c2VkIGlmIHRoZSByZXN1bHQgdHlwZSB3aWxsIGJlIGEgY3Vyc29y
LgogICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5z
YWN0aW9uLmNwcAppbmRleCBmMGIzNGEwZGU4MjY1ODg4YzBhNGQzOGE2MWFlZTE5ZGI2NGNiN2Ix
Li5jZTg0OWZkM2Y3NjRhNDVmZTgwMWNhZGUyMTA2ZGVkMDE1ZTNiNGViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lU
cmFuc2FjdGlvbi5jcHAKQEAgLTMwNiwxMyArMzA2LDEzIEBAIGJvb2wgTGVnYWN5VHJhbnNhY3Rp
b246Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faGFzUGVuZGluZ0Fj
dGl2aXR5ICYmICFtX2NvbnRleHRTdG9wcGVkOwogfQogCi1ib29sIExlZ2FjeVRyYW5zYWN0aW9u
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBMZWdhY3lUcmFu
c2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOwogICAgIEFTU0VSVChtX3N0
YXRlICE9IEZpbmlzaGVkKTsKICAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZpdHkpOwogICAg
IEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFTU0VSVChldmVudC0+dGFy
Z2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOwogICAg
IG1fc3RhdGUgPSBGaW5pc2hlZDsKIAogICAgIC8vIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCkBA
IC0zMjgsOCArMzI4LDggQEAgYm9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICB0YXJnZXRzLmFwcGVuZChkYigpKTsKIAogICAg
IC8vIEZJWE1FOiBXaGVuIHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3
aWxsIHByb2JhYmx5IG5lZWQgdG8gY2hhbmdlLgotICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmFib3J0RXZlbnQpOwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBJREJFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKyAgICBBU1NFUlQoZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgYm9vbCByZXR1cm5WYWx1ZSA9IElEQkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogICAgIC8vIEZJWE1FOiBUcnkgdG8g
Y29uc3RydWN0IGEgdGVzdCB3aGVyZSB8dGhpc3wgb3V0bGl2ZXMgb3BlbkRCUmVxdWVzdCBhbmQg
d2UKICAgICAvLyBnZXQgYSBjcmFzaC4KICAgICBpZiAobV9vcGVuREJSZXF1ZXN0KSB7CkBAIC0z
NTksMTQgKzM1OSwxNCBAQCBjb25zdCBjaGFyKiBMZWdhY3lUcmFuc2FjdGlvbjo6YWN0aXZlRE9N
T2JqZWN0TmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuICJMZWdhY3lUcmFuc2FjdGlvbiI7CiB9CiAK
LXZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYg
ZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3N0YXRlICE9IEZpbmlzaGVkLCAi
QSBmaW5pc2hlZCB0cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9mIHR5cGUg
JXMuIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9j
b250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudCk7CisgICAgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVu
dCkpOwogfQogCiBJREJEYXRhYmFzZUJhY2tlbmQqIExlZ2FjeVRyYW5zYWN0aW9uOjpiYWNrZW5k
REIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaAppbmRleCA4M2I3OTcxMTVlNzliN2VmMWJj
Y2M1YWE0MDM3MGUyMzc1YWU5NDIyLi5mNzlkZWMzMzM5NWRhMmE1YmQ2NjMzYTYyM2M4M2EzZjk3
MDc1NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5VHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYp
IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVhbCBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwpAQCAtMTA0LDcg
KzEwNCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTGVnYWN5VHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGludDY0X3QsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUsIExlZ2FjeURhdGFiYXNlKiwgTGVnYWN5T3BlbkRCUmVxdWVz
dCosIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKTsKIAotICAgIHZvaWQgZW5xdWV1ZUV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYp
OwogICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOwogCiAgICAgdm9pZCByZWdpc3Rlck9wZW5D
dXJzb3IoTGVnYWN5Q3Vyc29yKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCmluZGV4IGMzY2MzODFhODhhMDJhODgyNzFmZGI3ZDQy
NTUxYTAzZWRjNTE3OGIuLjA0NDM0MGY3YTk4Yjg4ZmNlZTE2NzVkYTE5YTIxNGZkZjQ1NDQ5NzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCkBAIC0yOTksMTMgKzI5OSwxMSBAQCB2b2lkIE1lZGlhU3RyZWFtOjpzY2hlZHVsZUFj
dGl2ZVN0YXRlQ2hhbmdlKCkKIAogdm9pZCBNZWRpYVN0cmVhbTo6YWN0aXZpdHlFdmVudFRpbWVy
RmlyZWQoKQogewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CisgICAgVmVjdG9y
PFJlZjxFdmVudD4+IGV2ZW50czsKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEFjdGl2aXR5
RXZlbnRzKTsKIAogICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHMpCi0gICAgICAgIGRpc3Bh
dGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKLQotICAgIGV2ZW50cy5jbGVhcigpOworICAgICAg
ICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogVVJMUmVnaXN0cnkmIE1lZGlhU3RyZWFtOjpy
ZWdpc3RyeSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtLmgKaW5kZXggMzFhNDYxODRmMzIwMTdjMTBlMjc1ZTEwODhlYmNhMmQ5YTli
ZDU4ZC4uMWE0NTY0NzZiOGVjMzc2OTc2NmNmZmQwZTRmMmJhNWVjZGFiNWFhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaApAQCAtMTI4
LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0
cmVhbVRyYWNrPj4gbV90cmFja1NldDsKIAogICAgIFRpbWVyIG1fYWN0aXZpdHlFdmVudFRpbWVy
OwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEFjdGl2aXR5RXZlbnRzOwor
ICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX3NjaGVkdWxlZEFjdGl2aXR5RXZlbnRzOwogCiAgICAg
VmVjdG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAKaW5kZXggNTI3YjVkMTlk
OTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4YmNkNWQ5OS4uYzllMmNjYWM1YzFhNjM3Y2FlMjUyZWFh
ZTM5ZTE4ZWRhYWJkNGUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC0xNDUsOSArMTQ1LDkgQEAgYm9vbCBSVENE
VE1GU2VuZGVyOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgUlRDRFRNRlNlbmRlcjo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBSVENEVE1GU2VuZGVyOjpzY2hlZHVsZURpc3BhdGNo
RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewotICAgIG1fc2NoZWR1bGVkRXZlbnRzLmFwcGVu
ZChldmVudCk7CisgICAgbV9zY2hlZHVsZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkp
OwogCiAgICAgaWYgKCFtX3NjaGVkdWxlZEV2ZW50VGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV9zY2hlZHVsZWRFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKQEAgLTE1OCwxMSArMTU4LDEx
IEBAIHZvaWQgUlRDRFRNRlNlbmRlcjo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKCkKICAgICBp
ZiAobV9zdG9wcGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50
Pj4gZXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBldmVudHM7CiAgICAgZXZlbnRzLnN3
YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCiAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykK
LSAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaAppbmRleCAwMjNl
ODI3OTdiNjM0NTBkYWZjMzQ0YzgyNmE2NzNkOTNjM2NmZDNjLi5hYTVkZGE5MWJiOGY0OTQ1NmZh
N2RlOGJmZTRmZmFmYTZmMDM1NjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgog
ICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKICAg
ICBib29sIGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZv
aWQgc2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIHNj
aGVkdWxlRGlzcGF0Y2hFdmVudChSZWY8RXZlbnQ+JiYpOwogICAgIHZvaWQgc2NoZWR1bGVkRXZl
bnRUaW1lckZpcmVkKCk7CiAKICAgICAvLyBFdmVudFRhcmdldApAQCAtOTAsNyArOTAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zdG9wcGVkOwogCiAgICAgVGltZXIgbV9zY2hlZHVsZWRFdmVu
dFRpbWVyOwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKKyAg
ICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9zY2hlZHVsZWRFdmVudHM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0RhdGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDRGF0YUNoYW5uZWwuY3BwCmluZGV4IGQ3NzA4Y2EwNWJlYWQxNDE2NzdmYzg0NWE5YzMz
NzZlNjQ0ZmQzMTQuLjU1ZjUwODYxNjg2YzFkNmVhYmQyMDUzNDBlZDM4MzVhNjgyNWE0MjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5u
ZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCkBAIC0zMDQsOSArMzA0LDkgQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c3RvcCgp
CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBSVENE
YXRhQ2hhbm5lbDo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQordm9pZCBSVENEYXRhQ2hhbm5lbDo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFJlZjxFdmVudD4m
JiBldmVudCkKIHsKLSAgICBtX3NjaGVkdWxlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIG1f
c2NoZWR1bGVkRXZlbnRzLmFwcGVuZChXVEY6Om1vdmUoZXZlbnQpKTsKIAogICAgIGlmICghbV9z
Y2hlZHVsZWRFdmVudFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc2NoZWR1bGVkRXZlbnRU
aW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC0zMTcsMTEgKzMxNywxMSBAQCB2b2lkIFJUQ0RhdGFD
aGFubmVsOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAgIGlmIChtX3N0b3BwZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CisgICAg
VmVjdG9yPFJlZjxFdmVudD4+IGV2ZW50czsKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEV2
ZW50cyk7CiAKICAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmgKaW5kZXggODhlNzRhZTllZjIyODIyNTRh
MWFjNmJmNTNmYTRkNzU1NTQ0ZWU3NS4uOWIzYzY0ZGIzZjg5MDc2MTJkMTFjMmNiN2MzYWI5M2M0
Yzg2ZmM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENEYXRhQ2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDRGF0YUNoYW5uZWwuaApAQCAtMTEwLDcgKzExMCw3IEBAIHByaXZhdGU6CiAgICAgQmluYXJ5
VHlwZSBtX2JpbmFyeVR5cGU7CiAKICAgICBUaW1lciBtX3NjaGVkdWxlZEV2ZW50VGltZXI7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fc2NoZWR1bGVkRXZlbnRzOworICAgIFZlY3RvcjxS
ZWY8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggZGQ0NjQxZTFiOGRhMzJkYTcxNGYzNDY4MTMzOTY3YzU4
MWE0M2U2NS4uYzZhZjEyYmRmNGUzM2NjMDM0YjM3Njg5OTNjNDBlN2NmYWU1YjEyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi5jcHAKQEAgLTcyNSw5ICs3MjUsOSBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpj
aGFuZ2VJY2VDb25uZWN0aW9uU3RhdGUoSWNlQ29ubmVjdGlvblN0YXRlIGljZUNvbm5lY3Rpbwog
ICAgIH0KIH0KIAotdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6c2NoZWR1
bGVEaXNwYXRjaEV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKLSAgICBtX3NjaGVkdWxlZEV2
ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIG1fc2NoZWR1bGVkRXZlbnRzLmFwcGVuZChXVEY6Om1v
dmUoZXZlbnQpKTsKIAogICAgIGlmICghbV9zY2hlZHVsZWRFdmVudFRpbWVyLmlzQWN0aXZlKCkp
CiAgICAgICAgIG1fc2NoZWR1bGVkRXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC03Mzgs
MTEgKzczOCwxMSBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpzY2hlZHVsZWRFdmVudFRpbWVy
RmlyZWQoKQogICAgIGlmIChtX3N0b3BwZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3Rv
cjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IGV2ZW50czsK
ICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEV2ZW50cyk7CiAKICAgICBmb3IgKGF1dG8mIGV2
ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7Cisg
ICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogCiAgICAgZXZlbnRzLmNsZWFyKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLmgKaW5kZXggNTJkYzc5MzBiMDQyNjIwMTAxYWRmNmQyZjY0M2RmY2E1ZTg1ZTBmMC4u
ODIzYmJmMjIyYjE1YjRlZjM5ZGZiMjQ0OGQ1YzdlODU1MDU3NzUwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaApA
QCAtMTI3LDcgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgUlRDUGVlckNvbm5lY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFBhc3NSZWZQdHI8UlRDQ29uZmlndXJhdGlvbj4sIEV4Y2VwdGlv
bkNvZGUmKTsKIAogICAgIHN0YXRpYyBSZWZQdHI8UlRDQ29uZmlndXJhdGlvbj4gcGFyc2VDb25m
aWd1cmF0aW9uKGNvbnN0IERpY3Rpb25hcnkmIGNvbmZpZ3VyYXRpb24sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Cisg
ICAgdm9pZCBzY2hlZHVsZURpc3BhdGNoRXZlbnQoUmVmPEV2ZW50PiYmKTsKICAgICB2b2lkIHNj
aGVkdWxlZEV2ZW50VGltZXJGaXJlZCgpOwogICAgIGJvb2wgaGFzTG9jYWxTdHJlYW1XaXRoVHJh
Y2tJZChjb25zdCBTdHJpbmcmIHRyYWNrSWQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KaW5k
ZXggZTQ1MzJjOGExNWZkNTYyOWQyYTE4NTg4Zjk3YjE1NGEyMDhmMGRiYy4uNmM4M2VkY2VhNTA4
ZTMzYjZmNjQ3NjNhNzg5ZWE3NTMyYTQxNGQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQpA
QCAtMjQzLDggKzI0Myw4IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6bW92aWVTaXplKCkgY29uc3QKIHZvaWQgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQ6OnBvc3RFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBSZWY8SFRNTFBs
dWdJbkVsZW1lbnQ+IHByb3RlY3QoKm1fcGFyZW50RWxlbWVudCk7Ci0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgbV9w
YXJlbnRFbGVtZW50LT5kaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKKyAgICBSZWY8RXZlbnQ+
IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVlKTsKKyAgICBtX3Bh
cmVudEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiAjaWYgUExBVEZPUk0oSU9T
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJv
eGltaXR5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9E
ZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmNwcAppbmRleCA2MDc4ZjM3ZmI4ZDNiOTFlNGVhNzZi
NDBmM2IyNDBjYjAyZGUxM2ZiLi42OGVhMjk2YWY4M2E1MWMzZGU2MThjOTk2ZWQ0MTE2NDZiMThj
OTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9EZXZpY2VQ
cm94aW1pdHlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hp
bWl0eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmNwcApAQCAtNTcsNyArNTcsNyBAQCBib29s
IERldmljZVByb3hpbWl0eUNvbnRyb2xsZXI6Omhhc0xhc3REYXRhKCkKICAgICByZXR1cm4gZGV2
aWNlUHJveGltaXR5Q2xpZW50KCktPmhhc0xhc3REYXRhKCk7CiB9CiAKLVBhc3NSZWZQdHI8RXZl
bnQ+IERldmljZVByb3hpbWl0eUNvbnRyb2xsZXI6OmdldExhc3RFdmVudCgpCitSZWZQdHI8RXZl
bnQ+IERldmljZVByb3hpbWl0eUNvbnRyb2xsZXI6OmdldExhc3RFdmVudCgpCiB7CiAgICAgcmV0
dXJuIERldmljZVByb3hpbWl0eUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdGRldmlj
ZXByb3hpbWl0eUV2ZW50LCBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+dmFsdWUoKSwgZGV2aWNl
UHJveGltaXR5Q2xpZW50KCktPm1pbigpLCBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+bWF4KCkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNl
UHJveGltaXR5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkv
RGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5oCmluZGV4IDQwZGRmYjdmMjEwY2ZhMDQxZDVkNmZk
ZGE2MGQyZjBiYTI1NWFiMDYuLjg5Y2YwNTQ5YTY0M2QzOTZhYTMwNDNmNWQzZmE5NjI5ZTFkOTRj
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVBy
b3hpbWl0eUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0
eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmgKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgog
ICAgIERldmljZVByb3hpbWl0eUNsaWVudCogZGV2aWNlUHJveGltaXR5Q2xpZW50KCk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzTGFzdERhdGEoKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RXZl
bnQ+IGdldExhc3RFdmVudCgpOworICAgIHZpcnR1YWwgUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZl
bnQoKTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogICAgIHN0
YXRpYyBEZXZpY2VQcm94aW1pdHlDb250cm9sbGVyKiBmcm9tKFBhZ2UqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKaW5kZXggNjQ2NTg0MDAy
MGVhNjUzOWQ4MGY0YjQzYzE3YTU0MmQ4ZDNiNzI3MS4uNDFlYjEwOWU3YmViZDhiZWYxYjk2ZTg2
NDUyNjI1NTYzOTI1MWRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5jcHAKQEAgLTY0OCw3ICs2NDgsNyBAQCB2b2lkIFdlYlNvY2tldDo6ZGlz
cGF0Y2hPclF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogICAgIGlmIChtX3Nob3VsZERl
bGF5RXZlbnRGaXJpbmcpCiAgICAgICAgIG1fcGVuZGluZ0V2ZW50cy5hcHBlbmQoV1RGOjptb3Zl
KGV2ZW50KSk7CiAgICAgZWxzZQotICAgICAgICBkaXNwYXRjaEV2ZW50KFdURjo6bW92ZShldmVu
dCkpOworICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogfSAgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmNwcAppbmRleCBkZGUxMzNjYzdjNzAxNDRl
MmQxMDM0NGZhNzcyMzNjOTFmMDY1ZmQ0Li5jOTA3NDYwNWEzZTYwOTU4MGY5OTJhYTYxZjdkNWUz
ZjA1OGRiNTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCkBAIC0xNjYsOSArMTY2LDkg
QEAgYm9vbCBGb250TG9hZGVyOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKICAgICBy
ZXR1cm4gIW1fbnVtTG9hZGluZ0Zyb21DU1MgJiYgIW1fbnVtTG9hZGluZ0Zyb21KUzsKIH0KIAot
dm9pZCBGb250TG9hZGVyOjpzY2hlZHVsZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQor
dm9pZCBGb250TG9hZGVyOjpzY2hlZHVsZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKLSAg
ICBtX3BlbmRpbmdFdmVudHMuYXBwZW5kKGV2ZW50KTsKKyAgICBtX3BlbmRpbmdFdmVudHMuYXBw
ZW5kKFdURjo6bW92ZShldmVudCkpOwogICAgIGlmICghbV9wZW5kaW5nRXZlbnRzVGltZXIuaXNB
Y3RpdmUoKSkKICAgICAgICAgbV9wZW5kaW5nRXZlbnRzVGltZXIuc3RhcnRPbmVTaG90KDApOwog
fQpAQCAtMTc4LDE3ICsxNzgsMTcgQEAgdm9pZCBGb250TG9hZGVyOjpmaXJlUGVuZGluZ0V2ZW50
cygpCiAgICAgaWYgKG1fcGVuZGluZ0V2ZW50cy5pc0VtcHR5KCkgJiYgIW1fbG9hZGluZ0RvbmVF
dmVudCAmJiAhbV9jYWxsYmFja3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBW
ZWN0b3I8UmVmUHRyPEV2ZW50Pj4gcGVuZGluZ0V2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50
Pj4gcGVuZGluZ0V2ZW50czsKICAgICBtX3BlbmRpbmdFdmVudHMuc3dhcChwZW5kaW5nRXZlbnRz
KTsKIAogICAgIGJvb2wgbG9hZGluZ0RvbmUgPSBmYWxzZTsKICAgICBpZiAobV9sb2FkaW5nRG9u
ZUV2ZW50KSB7Ci0gICAgICAgIHBlbmRpbmdFdmVudHMuYXBwZW5kKG1fbG9hZGluZ0RvbmVFdmVu
dC5yZWxlYXNlKCkpOworICAgICAgICBwZW5kaW5nRXZlbnRzLmFwcGVuZChtX2xvYWRpbmdEb25l
RXZlbnQucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGxvYWRpbmdEb25lID0gdHJ1ZTsKICAg
ICB9CiAKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcGVuZGluZ0V2ZW50cy5z
aXplKCk7ICsraW5kZXgpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50c1tpbmRl
eF0ucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChwZW5kaW5nRXZlbnRzW2luZGV4
XSk7CiAKICAgICBpZiAobG9hZGluZ0RvbmUgJiYgIW1fY2FsbGJhY2tzLmlzRW1wdHkoKSkgewog
ICAgICAgICBWZWN0b3I8UmVmUHRyPFZvaWRDYWxsYmFjaz4+IGNhbGxiYWNrczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Rm9udExvYWRlci5oCmluZGV4IGRmYzUwMWE3ZWJlZTA5NWYyMTI1Mjk4N2ZjYjNjNmUwZGFjNGNm
YjYuLjMzNDQ1OTRlNjE4OTIwYzA5N2VlMDFiZWRmYzYxMWFiYTkxMDZkNmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRMb2FkZXIuaApAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIEV2ZW50VGFyZ2V0
RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKICAgICB1bnNpZ25lZCBtX251bUxvYWRpbmdGcm9tQ1NT
OwogICAgIHVuc2lnbmVkIG1fbnVtTG9hZGluZ0Zyb21KUzsKLSAgICBWZWN0b3I8UmVmUHRyPEV2
ZW50Pj4gbV9wZW5kaW5nRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX3BlbmRpbmdF
dmVudHM7CiAgICAgVmVjdG9yPFJlZlB0cjxWb2lkQ2FsbGJhY2s+PiBtX2NhbGxiYWNrczsKICAg
ICBSZWZQdHI8RXZlbnQ+IG1fbG9hZGluZ0RvbmVFdmVudDsKICAgICBUaW1lciBtX3BlbmRpbmdF
dmVudHNUaW1lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25D
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVy
LmNwcAppbmRleCAxMTUxYmQxZWJhNWJlNGU5NjQ4ZTRmM2E5ZDAyNDYxZGRhMzVkZGI4Li45MzA5
MmJjZmI3ZmRiOWZhNTEyODc5YzNmNTQ4OGEwNDg2MDdjMTA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wg
RGV2aWNlTW90aW9uQ29udHJvbGxlcjo6aGFzTGFzdERhdGEoKQogICAgIHJldHVybiBkZXZpY2VN
b3Rpb25DbGllbnQoKS0+bGFzdE1vdGlvbigpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50PiBEZXZp
Y2VNb3Rpb25Db250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQorUmVmUHRyPEV2ZW50PiBEZXZpY2VN
b3Rpb25Db250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQogewogICAgIHJldHVybiBEZXZpY2VNb3Rp
b25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5kZXZpY2Vtb3Rpb25FdmVudCwgZGV2aWNlTW90
aW9uQ2xpZW50KCktPmxhc3RNb3Rpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rldmlj
ZU1vdGlvbkNvbnRyb2xsZXIuaAppbmRleCA3ZDcyZDUxNWNjNmQ4MTNkYzFmMzhjNjE5ZTg5ZTJj
ZGNmZDRiOWRhLi4xNGRjNzQ0YjViNDRhZGEwNWIzZjNkYjNhZGY4OTgxZGNmOWVkYTI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogICAgIERldmljZU1vdGlvbkNsaWVudCogZGV2aWNlTW90aW9uQ2xpZW50
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGFzdERhdGEoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQoKSBvdmVycmlkZTsKIAogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogICAgIHN0YXRpYyBEZXZpY2VNb3Rpb25Db250
cm9sbGVyKiBmcm9tKFBhZ2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZp
Y2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9y
aWVudGF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYWNlM2IyYjIyOTYzZTgxMjYzOWI5MDgyY2Fi
ODQ2ZDEwMTdjZDUzNi4uMzk2YmY4Y2Y0MDk1ODQ4NzFmZTA2ZWE5NzNjMzBkNWQ2ZmQ4YzIzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
ci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI6
Omhhc0xhc3REYXRhKCkKICAgICByZXR1cm4gZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKS0+bGFz
dE9yaWVudGF0aW9uKCk7CiB9CiAKLVBhc3NSZWZQdHI8RXZlbnQ+IERldmljZU9yaWVudGF0aW9u
Q29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKK1JlZlB0cjxFdmVudD4gRGV2aWNlT3JpZW50YXRp
b25Db250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQogewogICAgIHJldHVybiBEZXZpY2VPcmllbnRh
dGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmRldmljZW9yaWVudGF0aW9uRXZlbnQsIGRl
dmljZU9yaWVudGF0aW9uQ2xpZW50KCktPmxhc3RPcmllbnRhdGlvbigpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaAppbmRleCAxMTgz
MDYzNDg2OWU5MDZlNTg3NzM3NGJiNzNhMmZkZTRlOGI5Mjg3Li5iMDFmOGQxYTYyYjA0NzkyYjM1
Zjg0M2EyZmYwMDg1N2E1MzExNDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rldmlj
ZU9yaWVudGF0aW9uQ29udHJvbGxlci5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlc3VtZVVwZGF0ZXMoKTsKICNlbHNlCiAgICAgdmlydHVhbCBib29sIGhhc0xhc3REYXRh
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQo
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgb3Zl
cnJpZGU7CiAjZW5kaWYKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMWU0OTNiODMwNjU3MzE3MDU4ODk5ODVhZjIy
Y2Y0MWJlOTY3Y2Y0YS4uZjVmYmViNGQwNmUzZWZhOWZhMmI5ZTg4MmIzMWJkZjc4YTdmM2U4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC00MDUwLDcgKzQwNTAsNyBAQCBFdmVudExpc3Rl
bmVyKiBEb2N1bWVudDo6Z2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZQogICAgIHJldHVybiBtX2RvbVdpbmRvdy0+Z2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihldmVudFR5cGUpOwogfQogCi12b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRvd0V2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gdGFy
Z2V0KQordm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dFdmVudChFdmVudCYgZXZlbnQsIEV2
ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkp
OwogICAgIGlmICghbV9kb21XaW5kb3cpCkBAIC00MDY4LDIxICs0MDY4LDIxIEBAIHZvaWQgRG9j
dW1lbnQ6OmRpc3BhdGNoV2luZG93TG9hZEV2ZW50KCkKICAgICBtX2NhY2hlZFJlc291cmNlTG9h
ZGVyLT5kb2N1bWVudERpZEZpbmlzaExvYWRFdmVudCgpOwogfQogCi12b2lkIERvY3VtZW50Ojpl
bnF1ZXVlV2luZG93RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIERvY3VtZW50
OjplbnF1ZXVlV2luZG93RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIGV2ZW50LT5z
ZXRUYXJnZXQobV9kb21XaW5kb3cuZ2V0KCkpOwotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZl
bnQoZXZlbnQpOworICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50
KSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmVucXVldWVEb2N1bWVudEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZURvY3VtZW50RXZlbnQoUmVmPEV2
ZW50PiYmIGV2ZW50KQogewogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgbV9ldmVu
dFF1ZXVlLmVucXVldWVFdmVudChldmVudCk7CisgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVu
dChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZU92ZXJmbG93
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIERvY3VtZW50OjplbnF1ZXVlT3Zl
cmZsb3dFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7Ci0gICAgbV9ldmVudFF1ZXVlLmVucXVl
dWVFdmVudChldmVudCk7CisgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudChXVEY6Om1vdmUo
ZXZlbnQpKTsKIH0KIAogUmVmUHRyPEV2ZW50PiBEb2N1bWVudDo6Y3JlYXRlRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudFR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNTk4MCwyNCArNTk4MCwy
NCBAQCB2b2lkIERvY3VtZW50OjpzZW5kV2lsbFJldmVhbEVkZ2VFdmVudHNJZk5lZWRlZChjb25z
dCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbgogICAgIC8vIEJvdHRvbSBlZGdlLgogICAgIGlm
IChuZXdQb3NpdGlvbi55KCkgPj0gd2lsbFJldmVhbEJvdHRvbU5vdGlmaWNhdGlvblBvaW50ICYm
IG5ld1Bvc2l0aW9uLnkoKSA+IG9sZFBvc2l0aW9uLnkoKQogICAgICAgICAmJiB3aWxsUmV2ZWFs
Qm90dG9tTm90aWZpY2F0aW9uUG9pbnQgPj0gb2xkUG9zaXRpb24ueSgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
d2Via2l0d2lsbHJldmVhbGJvdHRvbUV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBSZWY8
RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtp
dHdpbGxyZXZlYWxib3R0b21FdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgaWYgKCF0YXJn
ZXQpCi0gICAgICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQod2lsbFJldmVhbEV2ZW50LnJlbGVh
c2UoKSk7CisgICAgICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZl
YWxFdmVudCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHdpbGxSZXZlYWxFdmVudC0+
c2V0VGFyZ2V0KHRhcmdldCk7Ci0gICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50
KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVu
cXVldWVFdmVudChXVEY6Om1vdmUod2lsbFJldmVhbEV2ZW50KSk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBUb3AgZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueSgpIDw9IHdpbGxSZXZl
YWxUb3BOb3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi55KCkgPCBvbGRQb3NpdGlvbi55
KCkKICAgICAgICAgJiYgd2lsbFJldmVhbFRvcE5vdGlmaWNhdGlvblBvaW50IDw9IG9sZFBvc2l0
aW9uLnkoKSkgewotICAgICAgICBSZWZQdHI8RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWx0b3BFdmVudCwgZmFsc2UsIGZh
bHNlKTsKKyAgICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsdG9wRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAg
ICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KHdpbGxS
ZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KFdU
Rjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3
aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAgICAgbV9ldmVudFF1
ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAg
IG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC02MDA3LDI0ICs2MDA3LDI0IEBAIHZvaWQgRG9jdW1lbnQ6
OnNlbmRXaWxsUmV2ZWFsRWRnZUV2ZW50c0lmTmVlZGVkKGNvbnN0IEludFBvaW50JiBvbGRQb3Np
dGlvbiwgY29uCiAgICAgLy8gUmlnaHQgZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueCgpID49
IHdpbGxSZXZlYWxSaWdodE5vdGlmaWNhdGlvblBvaW50ICYmIG5ld1Bvc2l0aW9uLngoKSA+IG9s
ZFBvc2l0aW9uLngoKQogICAgICAgICAmJiB3aWxsUmV2ZWFsUmlnaHROb3RpZmljYXRpb25Qb2lu
dCA+PSBvbGRQb3NpdGlvbi54KCkpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiB3aWxsUmV2ZWFs
RXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFscmlnaHRF
dmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQg
PSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFscmlnaHRFdmVudCwg
ZmFsc2UsIGZhbHNlKTsKICAgICAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgICAgICBlbnF1ZXVl
V2luZG93RXZlbnQod2lsbFJldmVhbEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBlbnF1
ZXVlV2luZG93RXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIHdpbGxSZXZlYWxFdmVudC0+c2V0VGFyZ2V0KHRhcmdldCk7Ci0gICAg
ICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNl
KCkpOworICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudChXVEY6Om1vdmUod2ls
bFJldmVhbEV2ZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBMZWZ0IGVkZ2UuCiAg
ICAgaWYgKG5ld1Bvc2l0aW9uLngoKSA8PSB3aWxsUmV2ZWFsTGVmdE5vdGlmaWNhdGlvblBvaW50
ICYmIG5ld1Bvc2l0aW9uLngoKSA8IG9sZFBvc2l0aW9uLngoKQogICAgICAgICAmJiB3aWxsUmV2
ZWFsTGVmdE5vdGlmaWNhdGlvblBvaW50IDw9IG9sZFBvc2l0aW9uLngoKSkgewotICAgICAgICBS
ZWZQdHI8RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmtpdHdpbGxyZXZlYWxsZWZ0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIFJlZjxF
dmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0
d2lsbHJldmVhbGxlZnRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgaWYgKCF0YXJnZXQp
Ci0gICAgICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQod2lsbFJldmVhbEV2ZW50LnJlbGVhc2Uo
KSk7CisgICAgICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxF
dmVudCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHdpbGxSZXZlYWxFdmVudC0+c2V0
VGFyZ2V0KHRhcmdldCk7Ci0gICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KHdp
bGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVl
dWVFdmVudChXVEY6Om1vdmUod2lsbFJldmVhbEV2ZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAj
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAwM2QwYjQ1Y2Q3MTQ5NTFlN2Q1YWYwNDRjOWVm
YjlhYWM2MWM1MTY5Li5iNWZmM2Q0ZWMzNzFjMjFmNjBlNzY0YjJkODE1MzlmMGUyN2Y0MDVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzg4LDcgKzc4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpOwogICAgIHZvaWQgc2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7
CiAgICAgRXZlbnRMaXN0ZW5lciogZ2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNw
YXRjaFdpbmRvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0
PiA9IG51bGxwdHIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hXaW5kb3dFdmVu
dChFdmVudCYsIEV2ZW50VGFyZ2V0KiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGlzcGF0Y2hXaW5k
b3dMb2FkRXZlbnQoKTsKIAogICAgIFJlZlB0cjxFdmVudD4gY3JlYXRlRXZlbnQoY29uc3QgU3Ry
aW5nJiBldmVudFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTEwOTIsOSArMTA5Miw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkgY29uc3Qgb3ZlcnJpZGUg
ZmluYWw7CiAgICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdCBv
dmVycmlkZSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBlbnF1ZXVlV2luZG93
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZvaWQgZW5xdWV1ZURvY3VtZW50RXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZvaWQgZW5xdWV1ZU92ZXJmbG93RXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pOworICAgIHZvaWQgZW5xdWV1ZVdpbmRvd0V2ZW50KFJlZjxFdmVudD4mJik7
CisgICAgdm9pZCBlbnF1ZXVlRG9jdW1lbnRFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZvaWQg
ZW5xdWV1ZU92ZXJmbG93RXZlbnQoUmVmPEV2ZW50PiYmKTsKICAgICB2b2lkIGVucXVldWVQYWdl
c2hvd0V2ZW50KFBhZ2VzaG93RXZlbnRQZXJzaXN0ZW5jZSk7CiAgICAgdm9pZCBlbnF1ZXVlSGFz
aGNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYgb2xkVVJMLCBjb25zdCBTdHJpbmcmIG5ld1VSTCk7
CiAgICAgdm9pZCBlbnF1ZXVlUG9wc3RhdGVFdmVudChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc3RhdGVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50RXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1
ZXVlLmNwcAppbmRleCBhN2JiNWRmZTJjYWY4NDhkNGY1ZjkyZTI4MWM5NzMyZTQ4YTJlOWY5Li44
ZWE1ZWMwMzc0YmQxMzc4ODcxZDJhNjJkOTRhOWI5NzgyMGJjNmMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmNwcApAQCAtNjgsMTUgKzY4LDE1IEBAIERvY3VtZW50
RXZlbnRRdWV1ZTo6fkRvY3VtZW50RXZlbnRRdWV1ZSgpCiB7CiB9CiAKLWJvb2wgRG9jdW1lbnRF
dmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIERv
Y3VtZW50RXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAg
ICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsKLSAgICBBU1NFUlQoIW1fcXVldWVkRXZlbnRzLmNv
bnRhaW5zKGV2ZW50LmdldCgpKSk7CisgICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250YWlu
cyhldmVudC5wdHIoKSkpOwogCiAgICAgaWYgKG1faXNDbG9zZWQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIG1fcXVldWVkRXZlbnRzLmFkZChldmVudCk7CisgICAgbV9xdWV1ZWRFdmVu
dHMuYWRkKGV2ZW50LnB0cigpKTsKICAgICBpZiAoIW1fcGVuZGluZ0V2ZW50VGltZXItPmlzQWN0
aXZlKCkpCiAgICAgICAgIG1fcGVuZGluZ0V2ZW50VGltZXItPnN0YXJ0T25lU2hvdCgwKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTk5LDkgKzk5LDkgQEAgdm9pZCBEb2N1bWVudEV2ZW50UXVldWU6
OmVucXVldWVPckRpc3BhdGNoU2Nyb2xsRXZlbnQoTm9kZSYgdGFyZ2V0KQogICAgIGJvb2wgYnVi
YmxlcyA9IHRhcmdldC5pc0RvY3VtZW50Tm9kZSgpOwogICAgIGJvb2wgY2FuY2VsYWJsZSA9IGZh
bHNlOwogCi0gICAgUmVmUHRyPEV2ZW50PiBzY3JvbGxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLnNjcm9sbEV2ZW50LCBidWJibGVzLCBjYW5jZWxhYmxlKTsKKyAgICBSZWY8RXZl
bnQ+IHNjcm9sbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQs
IGJ1YmJsZXMsIGNhbmNlbGFibGUpOwogICAgIHNjcm9sbEV2ZW50LT5zZXRUYXJnZXQoJnRhcmdl
dCk7Ci0gICAgZW5xdWV1ZUV2ZW50KHNjcm9sbEV2ZW50LnJlbGVhc2UoKSk7CisgICAgZW5xdWV1
ZUV2ZW50KFdURjo6bW92ZShzY3JvbGxFdmVudCkpOwogfQogCiBib29sIERvY3VtZW50RXZlbnRR
dWV1ZTo6Y2FuY2VsRXZlbnQoRXZlbnQmIGV2ZW50KQpAQCAtMTQ2LDkgKzE0Niw5IEBAIHZvaWQg
RG9jdW1lbnRFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKICAgICAvLyBX
aHkgZG8gd2UgaGF2ZSB0aGlzIHNwZWNpYWwgY2FzZSBoZXJlIGluc3RlYWQgb2YgYSB2aXJ0dWFs
IGZ1bmN0aW9uIG9uIEV2ZW50VGFyZ2V0PwogICAgIEV2ZW50VGFyZ2V0JiBldmVudFRhcmdldCA9
ICpldmVudC50YXJnZXQoKTsKICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBldmVudFRhcmdl
dC50b0RPTVdpbmRvdygpKQotICAgICAgICB3aW5kb3ctPmRpc3BhdGNoRXZlbnQoJmV2ZW50LCAw
KTsKKyAgICAgICAgd2luZG93LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBudWxscHRyKTsKICAgICBl
bHNlCi0gICAgICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQoJmV2ZW50KTsKKyAgICAgICAg
ZXZlbnRUYXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudEV2ZW50UXVldWUuaAppbmRleCA5ODI1ZWQyZjYwN2E0MmE4N2I1MTEzM2E5Yjgx
NWU1NWVmMjMwZWRjLi43ZDExMWQyZDRiNWJhNjljOGIzZTdjMjJmODc0NGNlNzk2NzUzYjlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oCkBAIC00NCw3ICs0NCw3IEBA
IHB1YmxpYzoKICAgICBleHBsaWNpdCBEb2N1bWVudEV2ZW50UXVldWUoRG9jdW1lbnQmKTsKICAg
ICB2aXJ0dWFsIH5Eb2N1bWVudEV2ZW50UXVldWUoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBlbnF1
ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBl
bnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Y2VsRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSBvdmVy
cmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDk4YTYxMGZlZDFjNmE5NTRmYTE0Mjc0
ZWY5Y2FlMmNmOGE3Mzk4M2MuLjNkNzNkZWE2OGZmNGQzNThjYzEwOGJkYmZjYmE1Mzc1Mzg3NTMz
YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTI1Myw3ICsyNTMsNyBAQCBib29sIEVsZW1l
bnQ6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3Jt
RXZlbnQsIGNvbnN0CiAgICAgaWYgKGlzRm9yY2VFdmVudChwbGF0Zm9ybUV2ZW50KSAmJiAhZG9j
dW1lbnQoKS5oYXNMaXN0ZW5lclR5cGVGb3JFdmVudFR5cGUocGxhdGZvcm1FdmVudC50eXBlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VF
dmVudCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGRvY3VtZW50KCkuZGVmYXVsdFZp
ZXcoKSwgcGxhdGZvcm1FdmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0KTsKKyAgICBSZWY8TW91
c2VFdmVudD4gbW91c2VFdmVudCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGRvY3Vt
ZW50KCkuZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm1FdmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0
KTsKIAogICAgIGlmIChtb3VzZUV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gU2hvdWxkbid0IGhhcHBlbi4KQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIEVs
ZW1lbnQ6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRm
b3JtRXZlbnQsIGNvbnN0CiAgICAgICAgIC8vIFNwZWNpYWwgY2FzZTogSWYgaXQncyBhIGRvdWJs
ZSBjbGljayBldmVudCwgd2UgYWxzbyBzZW5kIHRoZSBkYmxjbGljayBldmVudC4gVGhpcyBpcyBu
b3QgcGFydAogICAgICAgICAvLyBvZiB0aGUgRE9NIHNwZWNzLCBidXQgaXMgdXNlZCBmb3IgY29t
cGF0aWJpbGl0eSB3aXRoIHRoZSBvbmRibGNsaWNrPSIiIGF0dHJpYnV0ZS4gVGhpcyBpcyB0cmVh
dGVkCiAgICAgICAgIC8vIGFzIGEgc2VwYXJhdGUgZXZlbnQgaW4gb3RoZXIgRE9NLWNvbXBsaWFu
dCBicm93c2VycyBsaWtlIEZpcmVmb3gsIGFuZCBzbyB3ZSBkbyB0aGUgc2FtZS4KLSAgICAgICAg
UmVmUHRyPE1vdXNlRXZlbnQ+IGRvdWJsZUNsaWNrRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUo
KTsKKyAgICAgICAgUmVmPE1vdXNlRXZlbnQ+IGRvdWJsZUNsaWNrRXZlbnQgPSBNb3VzZUV2ZW50
OjpjcmVhdGUoKTsKICAgICAgICAgZG91YmxlQ2xpY2tFdmVudC0+aW5pdE1vdXNlRXZlbnQoZXZl
bnROYW1lcygpLmRibGNsaWNrRXZlbnQsCiAgICAgICAgICAgICBtb3VzZUV2ZW50LT5idWJibGVz
KCksIG1vdXNlRXZlbnQtPmNhbmNlbGFibGUoKSwgbW91c2VFdmVudC0+dmlldygpLCBtb3VzZUV2
ZW50LT5kZXRhaWwoKSwKICAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNjcmVlblgoKSwgbW91c2VF
dmVudC0+c2NyZWVuWSgpLCBtb3VzZUV2ZW50LT5jbGllbnRYKCksIG1vdXNlRXZlbnQtPmNsaWVu
dFkoKSwKQEAgLTI4NSw3ICsyODUsNyBAQCBib29sIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VFdmVu
dChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtRXZlbnQsIGNvbnN0CiAKIGJvb2wg
RWxlbWVudDo6ZGlzcGF0Y2hXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZl
bnQpCiB7Ci0gICAgUmVmUHRyPFdoZWVsRXZlbnQ+IHdoZWVsRXZlbnQgPSBXaGVlbEV2ZW50Ojpj
cmVhdGUoZXZlbnQsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSk7CisgICAgUmVmPFdoZWVsRXZl
bnQ+IHdoZWVsRXZlbnQgPSBXaGVlbEV2ZW50OjpjcmVhdGUoZXZlbnQsIGRvY3VtZW50KCkuZGVm
YXVsdFZpZXcoKSk7CiAKICAgICAvLyBFdmVudHMgd2l0aCBubyBkZWx0YXMgYXJlIGltcG9ydGFu
dCBiZWNhdXNlIHRoZXkgY29udmV5IHBsYXRmb3JtIGluZm9ybWF0aW9uIGFib3V0IHNjcm9sbCBn
ZXN0dXJlcwogICAgIC8vIGFuZCBtb21lbnR1bSBiZWdpbm5pbmcgb3IgZW5kaW5nLiBIb3dldmVy
LCB0aG9zZSBldmVudHMgc2hvdWxkIG5vdCBiZSBzZW50IHRvIHRoZSBET00gc2luY2Ugc29tZQpA
QCAtMzAwLDkgKzMwMCw5IEBAIGJvb2wgRWxlbWVudDo6ZGlzcGF0Y2hXaGVlbEV2ZW50KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCiAKIGJvb2wgRWxlbWVudDo6ZGlzcGF0Y2hLZXlF
dmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIHBsYXRmb3JtRXZlbnQpCiB7Ci0gICAg
UmVmUHRyPEtleWJvYXJkRXZlbnQ+IGV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRm
b3JtRXZlbnQsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSk7CisgICAgUmVmPEtleWJvYXJkRXZl
bnQ+IGV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRmb3JtRXZlbnQsIGRvY3VtZW50
KCkuZGVmYXVsdFZpZXcoKSk7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJh
bWUoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxlcigpLmFjY2Vzc2liaWxpdHlQ
cmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oZXZlbnQuZ2V0KCkpKQorICAgICAgICBpZiAoZnJhbWUt
PmV2ZW50SGFuZGxlcigpLmFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oZXZl
bnQpKQogICAgICAgICAgICAgZXZlbnQtPnN0b3BQcm9wYWdhdGlvbigpOwogICAgIH0KICAgICBy
ZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMsIGV2ZW50KSAmJiAhZXZl
bnQtPmRlZmF1bHRIYW5kbGVkKCk7CkBAIC0yMzI0LDcgKzIzMjQsNyBAQCBib29sIEVsZW1lbnQ6
OmRpc3BhdGNoTW91c2VGb3JjZVdpbGxCZWdpbigpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9ybU1vdXNlRXZlbnQoZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSwgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmxh
c3RLbm93bk1vdXNlR2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok5v
VHlwZSwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIFdURjo6Y3VycmVudFRpbWUoKSwg
Rm9yY2VBdENsaWNrKTsKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VGb3JjZVdpbGxCZWdp
bkV2ZW50ID0gIE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0bW91c2Vmb3Jj
ZXdpbGxiZWdpbkV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtTW91c2VF
dmVudCwgMCwgbnVsbHB0cik7CisgICAgUmVmPE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VXaWxsQmVn
aW5FdmVudCA9ICBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9y
Y2V3aWxsYmVnaW5FdmVudCwgZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNl
RXZlbnQsIDAsIG51bGxwdHIpOwogICAgIG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudC0+c2V0VGFy
Z2V0KHRoaXMpOwogICAgIGRpc3BhdGNoRXZlbnQobW91c2VGb3JjZVdpbGxCZWdpbkV2ZW50KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudC5jcHAKaW5kZXggNTk2ZGQ4NThhMDRjMzYzYTc1ZTQ4ZWFjZjhhNzRhNWE4
ZDZlZTg1NS4uNWMxZTZmZTcwMTI3OGNkZTVhZTZlMDNlZDg1YTVlMjc0ZDc5YTBjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnQuY3BwCkBAIC0xNjIsMTIgKzE2MiwxMiBAQCBQYXNzUmVmUHRyPEV2ZW50PiBFdmVu
dDo6Y2xvbmVGb3IoSFRNTElGcmFtZUVsZW1lbnQqKSBjb25zdAogICAgIHJldHVybiBFdmVudDo6
Y3JlYXRlKHR5cGUoKSwgYnViYmxlcygpLCBjYW5jZWxhYmxlKCkpOwogfQogCi12b2lkIEV2ZW50
OjpzZXRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KQordm9pZCBFdmVudDo6
c2V0VGFyZ2V0KFJlZlB0cjxFdmVudFRhcmdldD4mJiB0YXJnZXQpCiB7CiAgICAgaWYgKG1fdGFy
Z2V0ID09IHRhcmdldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90YXJnZXQgPSB0YXJnZXQ7
CisgICAgbV90YXJnZXQgPSBXVEY6Om1vdmUodGFyZ2V0KTsKICAgICBpZiAobV90YXJnZXQpCiAg
ICAgICAgIHJlY2VpdmVkVGFyZ2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCmluZGV4IDA5ZTc3OGQ1MTM2
ZmYwZmNhODZlNGRjMjlmZWJhYWU4OWMyMTdmMGMuLjBjY2NlMTA4ODUzODg1MmUzMWQ0ZjM0MjE2
Y2VjZDE4ZTg5NDIzM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpIHsgbV90eXBlID0g
dHlwZTsgfQogICAgIAogICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBt
X3RhcmdldC5nZXQoKTsgfQotICAgIHZvaWQgc2V0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJn
ZXQ+KTsKKyAgICB2b2lkIHNldFRhcmdldChSZWZQdHI8RXZlbnRUYXJnZXQ+JiYpOwogCiAgICAg
RXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUYXJn
ZXQ7IH0KICAgICB2b2lkIHNldEN1cnJlbnRUYXJnZXQoRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJn
ZXQpIHsgbV9jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCAyYmRjMzUwYjVhNWY3NjMzMGIyZDdkYjc2ODJiNzZm
ODg2NTNhYTJkLi4zNDE4NDdmZDM4MDI4OGYzMDBlMGQ4M2I2YjA0M2RhYmU1MjE3NDk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtNzAsOSArNzAsOSBAQCBib29s
IFdpbmRvd0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50KQogICAg
IGlmICghbV93aW5kb3cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGV2ZW50LnNldFRh
cmdldChtX3RhcmdldC5nZXQoKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KG1fdGFyZ2V0LmNvcHlS
ZWYoKSk7CiAgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChtX3dpbmRvdy5nZXQoKSk7Ci0gICAg
bV93aW5kb3ctPmZpcmVFdmVudExpc3RlbmVycygmZXZlbnQpOworICAgIG1fd2luZG93LT5maXJl
RXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMDEsMTAg
KzIwMSwxMCBAQCBpbmxpbmUgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rhcmdl
dFJ1bGVzKE5vZGUmIHJlZmVyZW5jZU5vZGUpCiAgICAgcmV0dXJuICZyZWZlcmVuY2VOb2RlOwog
fQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiBub2Rl
LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aFNjb3BlZEV2ZW50KE5vZGUmIG5vZGUsIEV2ZW50JiBldmVudCkKIHsKICAgICAvLyBXZSBuZWVk
IHRvIHNldCB0aGUgdGFyZ2V0IGhlcmUgYmVjYXVzZSBpdCBjYW4gZ28gYXdheSBieSB0aGUgdGlt
ZSB3ZSBhY3R1YWxseSBmaXJlIHRoZSBldmVudC4KLSAgICBldmVudC0+c2V0VGFyZ2V0KGV2ZW50
VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpKTsKKyAgICBldmVudC5zZXRUYXJnZXQo
ZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobm9kZSkpOwogICAgIFNjb3BlZEV2ZW50
UXVldWU6OnNpbmdsZXRvbigpLmVucXVldWVFdmVudChldmVudCk7CiB9CiAKQEAgLTMwMCwyMyAr
MzAwLDE5IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoRXZlbnRJbkRPTShFdmVudCYgZXZlbnQsIGNv
bnN0IEV2ZW50UGF0aCYgcGF0aCwgV2luZG93RXZlbnRDCiAgICAgfQogfQogCi1ib29sIEV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+
IHBycEV2ZW50KQorYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogb3Jp
Z2luLCBFdmVudCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkp
OwotICAgIGlmICghcHJwRXZlbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCiAgICAgQVNTRVJU
KG9yaWdpbik7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUob3JpZ2luKTsKLSAgICBSZWZQdHI8RXZl
bnQ+IGV2ZW50KHBycEV2ZW50KTsKICAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gbm9kZS0+
ZG9jdW1lbnQoKS52aWV3KCk7Ci0gICAgRXZlbnRQYXRoIGV2ZW50UGF0aCgqbm9kZSwgKmV2ZW50
KTsKKyAgICBFdmVudFBhdGggZXZlbnRQYXRoKCpub2RlLCBldmVudCk7CiAKLSAgICBpZiAoRXZl
bnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQgPSBldmVudC0+cmVsYXRlZFRhcmdldCgpKQorICAgIGlm
IChFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQoKSkKICAg
ICAgICAgZXZlbnRQYXRoLnNldFJlbGF0ZWRUYXJnZXQoKm5vZGUsICpyZWxhdGVkVGFyZ2V0KTsK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGlmIChpczxU
b3VjaEV2ZW50PigqZXZlbnQpKSB7Ci0gICAgICAgIGlmICghZXZlbnRQYXRoLnVwZGF0ZVRvdWNo
TGlzdHMoZG93bmNhc3Q8VG91Y2hFdmVudD4oKmV2ZW50KSkpCisgICAgaWYgKGlzPFRvdWNoRXZl
bnQ+KGV2ZW50KSkgeworICAgICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRv
d25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAjZW5kaWYKQEAgLTMyNCw4ICszMjAsOCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAg
IENoaWxkTm9kZXNMYXp5U25hcHNob3Q6OnRha2VDaGlsZE5vZGVzTGF6eVNuYXBzaG90KCk7CiAK
ICAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVs
ZXMoKm5vZGUpOwotICAgIGV2ZW50LT5zZXRUYXJnZXQodGFyZ2V0KTsKLSAgICBpZiAoIWV2ZW50
LT50YXJnZXQoKSkKKyAgICBldmVudC5zZXRUYXJnZXQodGFyZ2V0KTsKKyAgICBpZiAoIWV2ZW50
LnRhcmdldCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnREaXNwYXRj
aEZvcmJpZGRlbigpKTsKQEAgLTMzNCwzMCArMzMwLDMwIEBAIGJvb2wgRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZW50KE5vZGUqIG9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQp
CiAKICAgICBJbnB1dEVsZW1lbnRDbGlja1N0YXRlIGNsaWNrSGFuZGxpbmdTdGF0ZTsKICAgICBp
ZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpKQotICAgICAgICBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50Pigqbm9kZSkud2lsbERpc3BhdGNoRXZlbnQoKmV2ZW50LCBjbGlja0hhbmRsaW5n
U3RhdGUpOworICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkud2lsbERp
c3BhdGNoRXZlbnQoZXZlbnQsIGNsaWNrSGFuZGxpbmdTdGF0ZSk7CiAKLSAgICBpZiAoIWV2ZW50
LT5wcm9wYWdhdGlvblN0b3BwZWQoKSAmJiAhZXZlbnRQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAg
ZGlzcGF0Y2hFdmVudEluRE9NKCpldmVudCwgZXZlbnRQYXRoLCB3aW5kb3dFdmVudENvbnRleHQp
OworICAgIGlmICghZXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2ZW50UGF0aC5pc0Vt
cHR5KCkpCisgICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTShldmVudCwgZXZlbnRQYXRoLCB3aW5k
b3dFdmVudENvbnRleHQpOwogCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3Bl
Y3RpbmdUYXJnZXRSdWxlcygqbm9kZSkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51
bGxwdHIpOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOworICAgIGV2ZW50LnNldFRhcmdl
dChldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcygqbm9kZSkpOworICAgIGV2ZW50LnNl
dEN1cnJlbnRUYXJnZXQobnVsbHB0cik7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsKIAog
ICAgIGlmIChjbGlja0hhbmRsaW5nU3RhdGUuc3RhdGVmdWwpCi0gICAgICAgIGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCpub2RlKS5kaWREaXNwYXRjaENsaWNrRXZlbnQoKmV2ZW50LCBjbGlj
a0hhbmRsaW5nU3RhdGUpOworICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9k
ZSkuZGlkRGlzcGF0Y2hDbGlja0V2ZW50KGV2ZW50LCBjbGlja0hhbmRsaW5nU3RhdGUpOwogCiAg
ICAgLy8gQ2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRsZXJzLiBXaGlsZSB0aGUgRE9NIGRvZXMgaGF2
ZSBhIGNvbmNlcHQgb2YgcHJldmVudGluZwogICAgIC8vIGRlZmF1bHQgaGFuZGxpbmcsIHRoZSBk
ZXRhaWwgb2Ygd2hpY2ggaGFuZGxlcnMgYXJlIGNhbGxlZCBpcyBhbiBpbnRlcm5hbAogICAgIC8v
IGltcGxlbWVudGF0aW9uIGRldGFpbCBhbmQgbm90IHBhcnQgb2YgdGhlIERPTS4KLSAgICBpZiAo
IWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkgJiYgIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQot
ICAgICAgICBjYWxsRGVmYXVsdEV2ZW50SGFuZGxlcnNJblRoZUJ1YmJsaW5nT3JkZXIoKmV2ZW50
LCBldmVudFBhdGgpOworICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCgpICYmICFldmVu
dC5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICBjYWxsRGVmYXVsdEV2ZW50SGFuZGxlcnNJblRo
ZUJ1YmJsaW5nT3JkZXIoZXZlbnQsIGV2ZW50UGF0aCk7CiAKICAgICAvLyBFbnN1cmUgdGhhdCBh
ZnRlciBldmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKICAg
ICAvLyBvdXRlcm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICBldmVudC0+c2V0VGFyZ2V0
KHdpbmRvd0V2ZW50Q29udGV4dC50YXJnZXQoKSk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJn
ZXQobnVsbHB0cik7CisgICAgZXZlbnQuc2V0VGFyZ2V0KHdpbmRvd0V2ZW50Q29udGV4dC50YXJn
ZXQoKSk7CisgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKIAotICAgIHJldHVy
biAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQ
cmV2ZW50ZWQoKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNob3VsZEV2ZW50Q3Jvc3NTaGFk
b3dCb3VuZGFyeShFdmVudCYgZXZlbnQsIFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QsIEV2ZW50VGFy
Z2V0JiB0YXJnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRj
aGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggNjQwNDBk
ZDNjYzRiZTg3YmViNjE4YzIwOWNmNDlmMjJjNDA2NTRkMi4uZjE4OWQ3YTRkZjJiODVkMjdhZjc0
NWNmYWUzYWFlNDY4MGRhOTM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApA
QCAtMzgsMTEgKzM4LDExIEBAIGNsYXNzIE5vZGU7CiAKIG5hbWVzcGFjZSBFdmVudERpc3BhdGNo
ZXIgewogCi1ib29sIGRpc3BhdGNoRXZlbnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+KTsKLXZv
aWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiwgUGFzc1JlZlB0cjxFdmVudD4pOworYm9vbCBk
aXNwYXRjaEV2ZW50KE5vZGUqLCBFdmVudCYpOwordm9pZCBkaXNwYXRjaFNjb3BlZEV2ZW50KE5v
ZGUmLCBFdmVudCYpOwogdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKEVsZW1lbnQqLCBFdmVu
dCogdW5kZXJseWluZ0V2ZW50LCBTaW11bGF0ZWRDbGlja01vdXNlRXZlbnRPcHRpb25zLCBTaW11
bGF0ZWRDbGlja1Zpc3VhbE9wdGlvbnMpOwogCi19OworfQogCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRR
dWV1ZS5oCmluZGV4IGU5OTM0YzUwOGMyZjE2NDlkNTRiODBiNjU4ZmY2ZGNiYjQxN2UxZjcuLmFj
MzllYzYxN2FmOGVkNDYyYTUxY2RlZTdhMTVkMWY0ODgyODRiMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
UXVldWUuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50UXVldWUg
ewogcHVibGljOgogICAgIHZpcnR1YWwgfkV2ZW50UXVldWUoKSB7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSA9IDA7CisgICAgdmlydHVhbCBib29s
IGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuY2Vs
RXZlbnQoRXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOyAvLyBEaXNj
YXJkIGFjY3VtdWxhdGVkIGV2ZW50cyBhbmQgYWxsIGZ1dHVyZSBldmVudHMuIE5vIGV2ZW50cyB3
aWxsIGJlIGRpc3BhdGNoZWQgYWZ0ZXIgdGhpcy4KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmNwcAppbmRleCA3NjJhNmE1MjhmMzUxMzQzM2NkYmRjZjk0MGE2ZTYyOTc5NzM2MjViLi5hYjUx
NTkyMmFiNGI3MDBiZjFlNmViMzgyOTY3Mzc0N2FhODZkZTM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5jcHAKQEAgLTEzNCw3ICsxMzQsNyBAQCBib29sIEV2ZW50VGFyZ2V0OjpjbGVhckF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiAgICAg
cmV0dXJuIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpOwog
fQogCi1ib29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQo
RXZlbnQqIGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWV2ZW50KSB7CiAg
ICAgICAgIGVjID0gVHlwZUVycm9yOwpAQCAtMTQ5LDE2ICsxNDksMTYgQEAgYm9vbCBFdmVudFRh
cmdldDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4g
ZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogfQogCi1ib29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hF
dmVudChFdmVudCYgZXZlbnQpCiB7Ci0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBl
dmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZShF
dmVudDo6QVRfVEFSR0VUKTsKLSAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBmaXJlRXZlbnRM
aXN0ZW5lcnMoZXZlbnQuZ2V0KCkpOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOworICAg
IGV2ZW50LnNldFRhcmdldCh0aGlzKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KHRoaXMp
OworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgYm9vbCBk
ZWZhdWx0UHJldmVudGVkID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKKyAgICBldmVudC5z
ZXRFdmVudFBoYXNlKDApOwogICAgIHJldHVybiBkZWZhdWx0UHJldmVudGVkOwogfQogCkBAIC0x
NjYsMzAgKzE2NiwzMCBAQCB2b2lkIEV2ZW50VGFyZ2V0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZl
bnRIYW5kbGVyKCkKIHsKIH0KIAotc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbGVnYWN5VHlw
ZShjb25zdCBFdmVudCogZXZlbnQpCitzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBsZWdhY3lU
eXBlKGNvbnN0IEV2ZW50JiBldmVudCkKIHsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZlbnQpCiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCku
d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQ7CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYW5pbWF0aW9uc3RhcnRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5hbmltYXRpb25zdGFydEV2ZW50KQogICAgICAgICByZXR1cm4gZXZlbnROYW1l
cygpLndlYmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQ7CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQpCiAgICAgICAgIHJl
dHVybiBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQ7CiAKLSAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudHJhbnNpdGlvbmVuZEV2ZW50KQorICAg
IGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCkKICAg
ICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS53ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQ7CiAKLSAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCkKKyAgICBpZiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50KQogICAgICAgICByZXR1cm4g
ZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudDsKIAogICAgIHJldHVybiBlbXB0eUF0b207CiB9
CiAKLWJvb2wgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCogZXZlbnQpCiti
b29sIEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmIGV2ZW50KQogewogICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRp
b246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBBU1NFUlQoZXZlbnQgJiYgZXZl
bnQtPmlzSW5pdGlhbGl6ZWQoKSk7CisgICAgQVNTRVJUKGV2ZW50LmlzSW5pdGlhbGl6ZWQoKSk7
CiAKICAgICBFdmVudFRhcmdldERhdGEqIGQgPSBldmVudFRhcmdldERhdGEoKTsKICAgICBpZiAo
IWQpCkBAIC0yMDAsMjEgKzIwMCwyMSBAQCBib29sIEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0
ZW5lcnMoRXZlbnQqIGV2ZW50KQogICAgIGlmICghbGVnYWN5VHlwZU5hbWUuaXNFbXB0eSgpKQog
ICAgICAgICBsZWdhY3lMaXN0ZW5lcnNWZWN0b3IgPSBkLT5ldmVudExpc3RlbmVyTWFwLmZpbmQo
bGVnYWN5VHlwZU5hbWUpOwogCi0gICAgRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJzVmVj
dG9yID0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5maW5kKGV2ZW50LT50eXBlKCkpOworICAgIEV2ZW50
TGlzdGVuZXJWZWN0b3IqIGxpc3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAuZmlu
ZChldmVudC50eXBlKCkpOwogCiAgICAgaWYgKGxpc3RlbmVyc1ZlY3RvcikKICAgICAgICAgZmly
ZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBkLCAqbGlzdGVuZXJzVmVjdG9yKTsKICAgICBlbHNlIGlm
IChsZWdhY3lMaXN0ZW5lcnNWZWN0b3IpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIHR5cGVOYW1l
ID0gZXZlbnQtPnR5cGUoKTsKLSAgICAgICAgZXZlbnQtPnNldFR5cGUobGVnYWN5VHlwZU5hbWUp
OworICAgICAgICBBdG9taWNTdHJpbmcgdHlwZU5hbWUgPSBldmVudC50eXBlKCk7CisgICAgICAg
IGV2ZW50LnNldFR5cGUobGVnYWN5VHlwZU5hbWUpOwogICAgICAgICBmaXJlRXZlbnRMaXN0ZW5l
cnMoZXZlbnQsIGQsICpsZWdhY3lMaXN0ZW5lcnNWZWN0b3IpOwotICAgICAgICBldmVudC0+c2V0
VHlwZSh0eXBlTmFtZSk7CisgICAgICAgIGV2ZW50LnNldFR5cGUodHlwZU5hbWUpOwogICAgIH0K
IAotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gIWV2
ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KICAgICAgICAgCi12b2lkIEV2ZW50VGFyZ2V0Ojpm
aXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQqIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50
TGlzdGVuZXJWZWN0b3ImIGVudHJ5KQordm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVu
ZXJzKEV2ZW50JiBldmVudCwgRXZlbnRUYXJnZXREYXRhKiBkLCBFdmVudExpc3RlbmVyVmVjdG9y
JiBlbnRyeSkKIHsKICAgICBSZWY8RXZlbnRUYXJnZXQ+IHByb3RlY3QoKnRoaXMpOwogCkBAIC0y
MjYsMzIgKzIyNiwzMiBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMoRXZl
bnQqIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50TGlzdAogICAgIHNpemVfdCBzaXpl
ID0gZW50cnkuc2l6ZSgpOwogICAgIGlmICghZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMpCiAgICAg
ICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzID0gc3RkOjptYWtlX3VuaXF1ZTxGaXJpbmdFdmVu
dEl0ZXJhdG9yVmVjdG9yPigpOwotICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5hcHBlbmQo
RmlyaW5nRXZlbnRJdGVyYXRvcihldmVudC0+dHlwZSgpLCBpLCBzaXplKSk7CisgICAgZC0+Zmly
aW5nRXZlbnRJdGVyYXRvcnMtPmFwcGVuZChGaXJpbmdFdmVudEl0ZXJhdG9yKGV2ZW50LnR5cGUo
KSwgaSwgc2l6ZSkpOwogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBudWxscHRy
OwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRGlzcGF0Y2hFdmVudENv
b2tpZTsKICAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CiAgICAgICAgIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwotICAgICAgICB3aWxsRGlzcGF0Y2hFdmVu
dENvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQoKmRv
Y3VtZW50LCAqZXZlbnQsIHNpemUgPiAwKTsKKyAgICAgICAgd2lsbERpc3BhdGNoRXZlbnRDb29r
aWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KCpkb2N1bWVu
dCwgZXZlbnQsIHNpemUgPiAwKTsKICAgICB9CiAKICAgICBmb3IgKDsgaSA8IHNpemU7ICsraSkg
ewogICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZExpc3RlbmVyID0g
ZW50cnlbaV07Ci0gICAgICAgIGlmIChldmVudC0+ZXZlbnRQaGFzZSgpID09IEV2ZW50OjpDQVBU
VVJJTkdfUEhBU0UgJiYgIXJlZ2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQorICAgICAgICBp
ZiAoZXZlbnQuZXZlbnRQaGFzZSgpID09IEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UgJiYgIXJlZ2lz
dGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmIChldmVudC0+ZXZlbnRQaGFzZSgpID09IEV2ZW50OjpCVUJCTElOR19QSEFTRSAmJiByZWdp
c3RlcmVkTGlzdGVuZXIudXNlQ2FwdHVyZSkKKyAgICAgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2Uo
KSA9PSBFdmVudDo6QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1
cmUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBJZiBzdG9wSW1tZWRpYXRl
UHJvcGFnYXRpb24gaGFzIGJlZW4gY2FsbGVkLCB3ZSBqdXN0IGJyZWFrIG91dCBpbW1lZGlhdGVs
eSwgd2l0aG91dAogICAgICAgICAvLyBoYW5kbGluZyBhbnkgbW9yZSBldmVudHMgb24gdGhpcyB0
YXJnZXQuCi0gICAgICAgIGlmIChldmVudC0+aW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkp
CisgICAgICAgIGlmIChldmVudC5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBj
b29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVudChjb250ZXh0
LCAqZXZlbnQpOworICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2ll
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsSGFuZGxlRXZlbnQoY29udGV4dCwgZXZl
bnQpOwogICAgICAgICAvLyBUbyBtYXRjaCBNb3ppbGxhLCB0aGUgQVRfVEFSR0VUIHBoYXNlIGZp
cmVzIGJvdGggY2FwdHVyaW5nIGFuZCBidWJibGluZwogICAgICAgICAvLyBldmVudCBsaXN0ZW5l
cnMsIGV2ZW4gdGhvdWdoIHRoYXQgdmlvbGF0ZXMgc29tZSB2ZXJzaW9ucyBvZiB0aGUgRE9NIHNw
ZWMuCi0gICAgICAgIHJlZ2lzdGVyZWRMaXN0ZW5lci5saXN0ZW5lci0+aGFuZGxlRXZlbnQoY29u
dGV4dCwgZXZlbnQpOworICAgICAgICByZWdpc3RlcmVkTGlzdGVuZXIubGlzdGVuZXItPmhhbmRs
ZUV2ZW50KGNvbnRleHQsICZldmVudCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkSGFuZGxlRXZlbnQoY29va2llKTsKICAgICB9CiAgICAgZC0+ZmlyaW5nRXZlbnRJdGVy
YXRvcnMtPnJlbW92ZUxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKaW5kZXggNjg4ZTZm
ZjcwYjkyY2I2ODkzYmM5OWRlNzkwZjA2ODlkN2E3OTJlZi4uNzA3Nzc3NDFhN2M0ZmEyNzFmMDNl
YWMyM2VjNzQ2ZmI5YzU2YTNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKQEAgLTEyMyw4
ICsxMjMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZlB0cjxFdmVudExpc3RlbmVyPiYmLCBib29s
IHVzZUNhcHR1cmUpOwogICAgIHZpcnR1YWwgYm9vbCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJl
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgYm9vbCBkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7IC8vIERPTSBBUEkK
KyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpOworICAgIGJvb2wgZGlzcGF0
Y2hFdmVudChFdmVudCosIEV4Y2VwdGlvbkNvZGUmKTsgLy8gRE9NIEFQSQogICAgIHZpcnR1YWwg
dm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7CiAKICAgICAvLyBVc2VkIGZv
ciBsZWdhY3kgIm9uRXZlbnQiIGF0dHJpYnV0ZSBBUElzLgpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1
YmxpYzoKICAgICBib29sIGhhc0NhcHR1cmluZ0V2ZW50TGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlKTsKICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yJiBnZXRFdmVu
dExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAKLSAgICBib29sIGZp
cmVFdmVudExpc3RlbmVycyhFdmVudCopOworICAgIGJvb2wgZmlyZUV2ZW50TGlzdGVuZXJzKEV2
ZW50Jik7CiAgICAgYm9vbCBpc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCk7CiAKICAgICB2b2lkIHZp
c2l0SlNFdmVudExpc3RlbmVycyhKU0M6OlNsb3RWaXNpdG9yJik7CkBAIC0xNTMsNyArMTUzLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSA9IDA7CiAgICAgCi0gICAgdm9pZCBmaXJl
RXZlbnRMaXN0ZW5lcnMoRXZlbnQqLCBFdmVudFRhcmdldERhdGEqLCBFdmVudExpc3RlbmVyVmVj
dG9yJik7CisgICAgdm9pZCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmLCBFdmVudFRhcmdldERh
dGEqLCBFdmVudExpc3RlbmVyVmVjdG9yJik7CiAKICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0
ZW5lckl0ZXJhdG9yOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9HZW5lcmlj
RXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUuY3Bw
CmluZGV4IDcyZGQwZmVlZDAyYWUyZGM3YzlmM2ZkNmNkN2NkYTk5MzE2YzM5MmEuLmRiYTg1Mjcw
ZGI0Nzk0ZjZmYWIyM2EyNmIzOWYxY2I1OTRiMWRkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9HZW5lcmljRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0dl
bmVyaWNFdmVudFF1ZXVlLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgR2VuZXJpY0V2ZW50
UXVldWU6OmRpc3BhdGNoT25lRXZlbnQoKQogICAgIFJlZjxFdmVudFRhcmdldD4gcHJvdGVjdCht
X293bmVyKTsKICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gbV9wZW5kaW5nRXZlbnRzLnRha2VG
aXJzdCgpOwogICAgIEV2ZW50VGFyZ2V0JiB0YXJnZXQgPSBldmVudC0+dGFyZ2V0KCkgPyAqZXZl
bnQtPnRhcmdldCgpIDogbV9vd25lcjsKLSAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudC5y
ZWxlYXNlKCkpOworICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KCpldmVudCk7CiB9CiAKIHZvaWQg
R2VuZXJpY0V2ZW50UXVldWU6OmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCmlu
ZGV4IGMzMjU2ODQ0ZjQ4NDU4ZTliYzc0N2NjMGU5ZDlkMzc1MDc4ZDhlYjAuLmEzYWI4OTZiZjUz
Y2Y4YTA3ZGU1ZTkyZmU5Njc3NDkzYTZmOTQzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0
LmNwcApAQCAtMTYwLDkgKzE2MCw4IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2Fn
ZXMoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZXNz
YWdlUG9ydEFycmF5PiBwb3J0cyA9IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCptX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIFdURjo6bW92ZShjaGFubmVscykpOwotICAgICAgICBSZWZQdHI8
RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFdURjo6bW92ZShwb3J0cyksIG1lc3Nh
Z2UucmVsZWFzZSgpKTsKLQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIEFT
U0VSVF9OT19FWENFUFRJT04pOworICAgICAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gTWVzc2FnZUV2
ZW50OjpjcmVhdGUoV1RGOjptb3ZlKHBvcnRzKSwgbWVzc2FnZS5yZWxlYXNlKCkpOworICAgICAg
ICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAz
ODdjYWViMGY1M2JjMTJiODQ5NjMwMGY5YjgzOGU3YmE5YmIyOTc0Li4wOGZhMDI0NmE1MzNhNTI4
MmUzNDZjYWUxNjRhYjJlYjRhNTBhNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yMDkwLDE5ICsy
MDkwLDE5IEBAIHZvaWQgTm9kZTo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50KQogICAg
IGlmIChpczxFbGVtZW50PigqdGhpcykgJiYgZG93bmNhc3Q8RWxlbWVudD4oKnRoaXMpLmlzRGlz
YWJsZWRGb3JtQ29udHJvbCgpICYmIGV2ZW50LmlzTW91c2VFdmVudCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBmaXJlRXZlbnRMaXN0ZW5lcnMoJmV2ZW50KTsKKyAgICBmaXJlRXZlbnRMaXN0
ZW5lcnMoZXZlbnQpOwogfQogCi12b2lkIE5vZGU6OmRpc3BhdGNoU2NvcGVkRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIE5vZGU6OmRpc3BhdGNoU2NvcGVkRXZlbnQoRXZlbnQm
IGV2ZW50KQogewogICAgIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudCgqdGhp
cywgZXZlbnQpOwogfQogCi1ib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCitib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFQTEFURk9STShJT1MpCi0gICAgaWYgKGlzPFRvdWNo
RXZlbnQ+KCpldmVudCkpCi0gICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoRXZlbnQoYWRvcHRS
ZWYoZG93bmNhc3Q8VG91Y2hFdmVudD4oZXZlbnQubGVha1JlZigpKSkpOworICAgIGlmIChpczxU
b3VjaEV2ZW50PihldmVudCkpCisgICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoRXZlbnQoZG93
bmNhc3Q8VG91Y2hFdmVudD4oZXZlbnQpKTsKICNlbmRpZgogICAgIHJldHVybiBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnQodGhpcywgZXZlbnQpOwogfQpAQCAtMjEyNiwyNCArMjEyNiwy
NCBAQCB2b2lkIE5vZGU6OmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoKQogYm9vbCBOb2Rl
OjpkaXNwYXRjaERPTUFjdGl2YXRlRXZlbnQoaW50IGRldGFpbCwgUGFzc1JlZlB0cjxFdmVudD4g
dW5kZXJseWluZ0V2ZW50KQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsK
LSAgICBSZWZQdHI8VUlFdmVudD4gZXZlbnQgPSBVSUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LkRPTUFjdGl2YXRlRXZlbnQsIHRydWUsIHRydWUsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSwg
ZGV0YWlsKTsKKyAgICBSZWY8VUlFdmVudD4gZXZlbnQgPSBVSUV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLkRPTUFjdGl2YXRlRXZlbnQsIHRydWUsIHRydWUsIGRvY3VtZW50KCkuZGVmYXVsdFZp
ZXcoKSwgZGV0YWlsKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdF
dmVudCk7CiAgICAgZGlzcGF0Y2hTY29wZWRFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50
LT5kZWZhdWx0SGFuZGxlZCgpOwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIVBM
QVRGT1JNKElPUykKLWJvb2wgTm9kZTo6ZGlzcGF0Y2hUb3VjaEV2ZW50KFBhc3NSZWZQdHI8VG91
Y2hFdmVudD4gZXZlbnQpCitib29sIE5vZGU6OmRpc3BhdGNoVG91Y2hFdmVudChUb3VjaEV2ZW50
JiBldmVudCkKIHsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRo
aXMsIGV2ZW50KTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKElORElFX1VJKQotYm9vbCBOb2Rl
OjpkaXNwYXRjaFVJUmVxdWVzdEV2ZW50KFBhc3NSZWZQdHI8VUlSZXF1ZXN0RXZlbnQ+IGV2ZW50
KQorYm9vbCBOb2RlOjpkaXNwYXRjaFVJUmVxdWVzdEV2ZW50KFVJUmVxdWVzdEV2ZW50JiBldmVu
dCkKIHsKICAgICBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQodGhpcywgZXZlbnQpOwot
ICAgIHJldHVybiBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSB8fCBldmVudC0+ZGVmYXVsdFByZXZl
bnRlZCgpOworICAgIHJldHVybiBldmVudC5kZWZhdWx0SGFuZGxlZCgpIHx8IGV2ZW50LmRlZmF1
bHRQcmV2ZW50ZWQoKTsKIH0KICNlbmRpZgogICAgIApAQCAtMjE1Myw4ICsyMTUzLDggQEAgYm9v
bCBOb2RlOjpkaXNwYXRjaEJlZm9yZUxvYWRFdmVudChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZWY8Tm9kZT4gcHJvdGVjdCgqdGhpcyk7Ci0g
ICAgUmVmUHRyPEJlZm9yZUxvYWRFdmVudD4gYmVmb3JlTG9hZEV2ZW50ID0gQmVmb3JlTG9hZEV2
ZW50OjpjcmVhdGUoc291cmNlVVJMKTsKLSAgICBkaXNwYXRjaEV2ZW50KGJlZm9yZUxvYWRFdmVu
dC5nZXQoKSk7CisgICAgUmVmPEJlZm9yZUxvYWRFdmVudD4gYmVmb3JlTG9hZEV2ZW50ID0gQmVm
b3JlTG9hZEV2ZW50OjpjcmVhdGUoc291cmNlVVJMKTsKKyAgICBkaXNwYXRjaEV2ZW50KGJlZm9y
ZUxvYWRFdmVudCk7CiAgICAgcmV0dXJuICFiZWZvcmVMb2FkRXZlbnQtPmRlZmF1bHRQcmV2ZW50
ZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggZWZmMDg2YTViZWUyZTBiZjg1Yjc3YWM4N2ViYzIx
YTUwNzUzYWJkNy4uN2I1OGY0ZjhkMjNhOGRhMjE5ZjhjOTRmODNmYjc5YWM1YTQ5MjIzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCkBAIC01MTksOSArNTE5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKSBvdmVycmlkZTsKIAogICAgIHVzaW5nIEV2ZW50VGFy
Z2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChF
dmVudCYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBkaXNwYXRjaFNjb3BlZEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+KTsKKyAgICB2b2lkIGRpc3BhdGNoU2NvcGVkRXZlbnQoRXZlbnQmKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYpOwogCkBAIC01MzMsMTAgKzUz
MywxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFQ
TEFURk9STShJT1MpCi0gICAgYm9vbCBkaXNwYXRjaFRvdWNoRXZlbnQoUGFzc1JlZlB0cjxUb3Vj
aEV2ZW50Pik7CisgICAgYm9vbCBkaXNwYXRjaFRvdWNoRXZlbnQoVG91Y2hFdmVudCYpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKElORElFX1VJKQotICAgIGJvb2wgZGlzcGF0Y2hVSVJlcXVlc3RFdmVu
dChQYXNzUmVmUHRyPFVJUmVxdWVzdEV2ZW50Pik7CisgICAgYm9vbCBkaXNwYXRjaFVJUmVxdWVz
dEV2ZW50KFVJUmVxdWVzdEV2ZW50Jik7CiAjZW5kaWYKIAogICAgIGJvb2wgZGlzcGF0Y2hCZWZv
cmVMb2FkRXZlbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Nj
b3BlZEV2ZW50UXVldWUuY3BwCmluZGV4IDIwZjE4Y2Q0YzJjYjg3MmU2NzZkYzcxNTM2NzVmNWU5
ZWI4NDZmMzkuLjkzNTAxMzIzNDg0YTM1NDQzOGY0MWRhMWIzOTcwMDNhYTlkOTdhMjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5jcHAKQEAgLTQzLDI3ICs0MywyNyBAQCBT
Y29wZWRFdmVudFF1ZXVlJiBTY29wZWRFdmVudFF1ZXVlOjpzaW5nbGV0b24oKQogICAgIHJldHVy
biBzY29wZWRFdmVudFF1ZXVlOwogfQogCi12b2lkIFNjb3BlZEV2ZW50UXVldWU6OmVucXVldWVF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgU2NvcGVkRXZlbnRRdWV1ZTo6ZW5x
dWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBpZiAobV9zY29waW5nTGV2ZWwp
Ci0gICAgICAgIG1fcXVldWVkRXZlbnRzLmFwcGVuZChldmVudCk7CisgICAgICAgIG1fcXVldWVk
RXZlbnRzLmFwcGVuZChXVEY6Om1vdmUoZXZlbnQpKTsKICAgICBlbHNlCiAgICAgICAgIGRpc3Bh
dGNoRXZlbnQoZXZlbnQpOwogfQogCi12b2lkIFNjb3BlZEV2ZW50UXVldWU6OmRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpIGNvbnN0Cit2b2lkIFNjb3BlZEV2ZW50UXVldWU6
OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KSBjb25zdAogewotICAgIEFTU0VSVChldmVudC0+
dGFyZ2V0KCkpOworICAgIEFTU0VSVChldmVudC50YXJnZXQoKSk7CiAgICAgLy8gU3RvcmUgdGhl
IHRhcmdldCBpbiBhIGxvY2FsIHZhcmlhYmxlIHRvIGF2b2lkIHBvc3NpYmx5IGRlcmVmZXJlbmNp
bmcgYSBudWxsaWZpZWQgUGFzc1JlZlB0ciBhZnRlciBpdCdzIHBhc3NlZCBvbi4KLSAgICBOb2Rl
KiBub2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gZXZl
bnQudGFyZ2V0KCktPnRvTm9kZSgpOwogICAgIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVu
dChub2RlLCBldmVudCk7CiB9CiAKIHZvaWQgU2NvcGVkRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hBbGxF
dmVudHMoKQogewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBxdWV1ZWRFdmVudHMgPSBXVEY6
Om1vdmUobV9xdWV1ZWRFdmVudHMpOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBxdWV1ZWRFdmVu
dHMgPSBXVEY6Om1vdmUobV9xdWV1ZWRFdmVudHMpOwogICAgIGZvciAoYXV0byYgcXVldWVkRXZl
bnQgOiBxdWV1ZWRFdmVudHMpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQocXVldWVkRXZlbnQucmVs
ZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChxdWV1ZWRFdmVudCk7CiB9CiAKIHZvaWQg
U2NvcGVkRXZlbnRRdWV1ZTo6aW5jcmVtZW50U2NvcGluZ0xldmVsKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NvcGVkRXZlbnRRdWV1ZS5oCmluZGV4IGNmNmIyOWM4ZDk5MTM3YjA1ZWM2NGU2MDQ3ZjM0MmU1
YTI3ZGZjYjAuLjc4YmJjNjVmMzlhZGQzN2Q0MjFiZTA0MmUzMDlmOWJmYWIwNTE3MjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuaApAQCAtNDYsMTggKzQ2LDE4IEBAIGNsYXNz
IFNjb3BlZEV2ZW50UXVldWUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjb3BlZEV2ZW50
UXVldWUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgU2Nv
cGVkRXZlbnRRdWV1ZSYgc2luZ2xldG9uKCk7Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAKIHBy
aXZhdGU6CiAgICAgU2NvcGVkRXZlbnRRdWV1ZSgpID0gZGVmYXVsdDsKICAgICB+U2NvcGVkRXZl
bnRRdWV1ZSgpID0gZGVsZXRlOwogCi0gICAgdm9pZCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+KSBjb25zdDsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBjb25zdDsKICAg
ICB2b2lkIGRpc3BhdGNoQWxsRXZlbnRzKCk7CiAgICAgdm9pZCBpbmNyZW1lbnRTY29waW5nTGV2
ZWwoKTsKICAgICB2b2lkIGRlY3JlbWVudFNjb3BpbmdMZXZlbCgpOwogCi0gICAgVmVjdG9yPFJl
ZlB0cjxFdmVudD4+IG1fcXVldWVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX3F1
ZXVlZEV2ZW50czsKICAgICB1bnNpZ25lZCBtX3Njb3BpbmdMZXZlbCB7IDAgfTsKIAogICAgIGZy
aWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPFdlYkNvcmU6OlNjb3BlZEV2ZW50UXVldWU+
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmluZGV4
IDQyZjVlNzk5MzkyZjUxZmM3OWRkZDExMzUzMzkyYWU0NzZiYzJlZmIuLmYwNTJkODZlYjU0NTBj
MjcwMzhiZDU0Y2RkZDU2YzhjODVkMDk5ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTQwNCw3ICs0MDQsNyBAQCBib29sIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OmRpc3BhdGNoRXJyb3JFdmVudChjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSwgaW50CiAKICAgICBBU1NFUlQoIW1faW5EaXNwYXRjaEVycm9yRXZlbnQpOwogICAgIG1f
aW5EaXNwYXRjaEVycm9yRXZlbnQgPSB0cnVlOwotICAgIFJlZlB0cjxFcnJvckV2ZW50PiBlcnJv
ckV2ZW50ID0gRXJyb3JFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsIHNvdXJjZU5hbWUsIGxpbmUsIGNv
bHVtbik7CisgICAgUmVmPEVycm9yRXZlbnQ+IGVycm9yRXZlbnQgPSBFcnJvckV2ZW50OjpjcmVh
dGUobWVzc2FnZSwgc291cmNlTmFtZSwgbGluZSwgY29sdW1uKTsKICAgICB0YXJnZXQtPmRpc3Bh
dGNoRXZlbnQoZXJyb3JFdmVudCk7CiAgICAgbV9pbkRpc3BhdGNoRXJyb3JFdmVudCA9IGZhbHNl
OwogICAgIHJldHVybiBlcnJvckV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRl
eCA2ODkzNzcwZWUwMWQ2ZGI1ZmE5NmUxMmE0NzAzMTExNmRjM2IzOTdlLi5iNzFmOTczZTdlMzAx
YmVkMDQxNzdhYjc2YWFhYjBhMzFlNmM1N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTY4MiwxMCArNjgyLDEw
IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGljdGF0ZWRUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjCiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1f
ZnJhbWUudmlldygpKQogICAgICAgICB2aWV3LT5kaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdU
ZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCk7CiAKLSAgICBSZWZQdHI8VGV4dEV2ZW50PiBldmVu
dCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9t
V2luZG93KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgUmVmPFRleHRFdmVu
dD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRpY3RhdGlvbihtX2ZyYW1lLmRvY3VtZW50
KCktPmRvbVdpbmRvdygpLCB0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGV2ZW50
LT5zZXRVbmRlcmx5aW5nRXZlbnQodHJpZ2dlcmluZ0V2ZW50KTsKIAotICAgIHRhcmdldC0+ZGlz
cGF0Y2hFdmVudChldmVudCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgdGFyZ2V0LT5kaXNwYXRj
aEV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCBhZjUyODZkYzkxZWFmZWVhYTBhYWI2YTk2
NWY0NmY3Yzk4MjUwZGVjLi5jZjFiZTJhYmU2NGZhNzQ2YWU2YjEwNWI0NjQxNzgwYjc0NTBlNTNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBF
ZGl0b3I6OnBhc3RlQXNQbGFpblRleHQoY29uc3QgU3RyaW5nJiBwYXN0aW5nVGV4dCwgYm9vbCBz
bWFydFJlcGxhY2UpCiAgICAgTm9kZSogdGFyZ2V0ID0gZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVj
dGlvbigpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47Ci0gICAgdGFyZ2V0LT5k
aXNwYXRjaEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yUGxhaW5UZXh0UGFzdGUoZG9jdW1lbnQo
KS5kb21XaW5kb3coKSwgcGFzdGluZ1RleHQsIHNtYXJ0UmVwbGFjZSksIElHTk9SRV9FWENFUFRJ
T04pOworICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvclBsYWlu
VGV4dFBhc3RlKGRvY3VtZW50KCkuZG9tV2luZG93KCksIHBhc3RpbmdUZXh0LCBzbWFydFJlcGxh
Y2UpKTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNGcmFnbWVudChQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IHBhc3RpbmdGcmFnbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0
Y2hTdHlsZSwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyByZXNwZWN0c01haWxCbG9ja3F1b3RlKQpA
QCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzRnJhZ21lbnQoUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBwYXN0aW5nRnJhZ21lbnQsIGJvb2wKICAgICBOb2RlKiB0YXJn
ZXQgPSBmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCk7CiAgICAgaWYgKCF0YXJnZXQpCiAg
ICAgICAgIHJldHVybjsKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVh
dGVGb3JGcmFnbWVudFBhc3RlKGRvY3VtZW50KCkuZG9tV2luZG93KCksIHBhc3RpbmdGcmFnbWVu
dCwgc21hcnRSZXBsYWNlLCBtYXRjaFN0eWxlLCByZXNwZWN0c01haWxCbG9ja3F1b3RlKSwgSUdO
T1JFX0VYQ0VQVElPTik7CisgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVudDo6Y3Jl
YXRlRm9yRnJhZ21lbnRQYXN0ZShkb2N1bWVudCgpLmRvbVdpbmRvdygpLCBwYXN0aW5nRnJhZ21l
bnQsIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHlsZSwgcmVzcGVjdHNNYWlsQmxvY2txdW90ZSkpOwog
fQogCiB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dEJ5cGFzc2luZ0RIVE1MKCkKQEAgLTg1
MSw4ICs4NTEsOCBAQCBib29sIEVkaXRvcjo6ZGlzcGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgRGF0YVRyYW5zZmVyQWNjZXNzUAogCiAgICAgUmVmUHRyPERhdGFU
cmFuc2Zlcj4gZGF0YVRyYW5zZmVyID0gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JDb3B5QW5kUGFz
dGUocG9saWN5KTsKIAotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBDbGlwYm9hcmRFdmVudDo6
Y3JlYXRlKGV2ZW50VHlwZSwgdHJ1ZSwgdHJ1ZSwgZGF0YVRyYW5zZmVyKTsKLSAgICB0YXJnZXQt
PmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgIFJlZjxFdmVudD4g
ZXZlbnQgPSBDbGlwYm9hcmRFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgdHJ1ZSwgdHJ1ZSwgZGF0
YVRyYW5zZmVyKTsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgIGJvb2wg
bm9EZWZhdWx0UHJvY2Vzc2luZyA9IGV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiAgICAgaWYg
KG5vRGVmYXVsdFByb2Nlc3NpbmcgJiYgcG9saWN5ID09IERhdGFUcmFuc2ZlckFjY2Vzc1BvbGlj
eTo6V3JpdGFibGUpIHsKICAgICAgICAgYXV0byBwYXN0ZWJvYXJkID0gUGFzdGVib2FyZDo6Y3Jl
YXRlRm9yQ29weUFuZFBhc3RlKCk7CkBAIC0xMDEyLDkgKzEwMTIsOSBAQCBzdGF0aWMgdm9pZCBk
aXNwYXRjaEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudHMoUGFzc1JlZlB0cjxFbGVtZW50PiBw
cnBTdGFydFJvbwogICAgIFJlZlB0cjxFbGVtZW50PiBzdGFydFJvb3QgPSBwcnBTdGFydFJvb3Q7
CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVuZFJvb3QgPSBwcnBFbmRSb290OwogICAgIGlmIChzdGFy
dFJvb3QpCi0gICAgICAgIHN0YXJ0Um9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxz
ZSksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBzdGFydFJvb3QtPmRpc3BhdGNoRXZlbnQo
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2
ZW50LCBmYWxzZSwgZmFsc2UpKTsKICAgICBpZiAoZW5kUm9vdCAmJiBlbmRSb290ICE9IHN0YXJ0
Um9vdCkKLSAgICAgICAgZW5kUm9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSks
IElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBlbmRSb290LT5kaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCwg
ZmFsc2UsIGZhbHNlKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNzUmVm
UHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBjbWQpCkBAIC0xNzIwLDggKzE3MjAsOCBAQCB2b2lk
IEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBTZXRDb21wb3NpdGlv
bk1vZGUgbW9kZSkKICAgICAvLyBXZSBzaG91bGQgc2VuZCB0aGlzIGV2ZW50IGJlZm9yZSBzZW5k
aW5nIGEgVGV4dEV2ZW50IGFzIHdyaXR0ZW4gaW4gU2VjdGlvbiA2LjIuMiBhbmQgNi4yLjMgb2YK
ICAgICAvLyB0aGUgRE9NIEV2ZW50IHNwZWNpZmljYXRpb24uCiAgICAgaWYgKEVsZW1lbnQqIHRh
cmdldCA9IGRvY3VtZW50KCkuZm9jdXNlZEVsZW1lbnQoKSkgewotICAgICAgICBSZWZQdHI8Q29t
cG9zaXRpb25FdmVudD4gZXZlbnQgPSBDb21wb3NpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmNvbXBvc2l0aW9uZW5kRXZlbnQsIGRvY3VtZW50KCkuZG9tV2luZG93KCksIHRleHQpOwot
ICAgICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpLCBJR05PUkVfRVhD
RVBUSU9OKTsKKyAgICAgICAgUmVmPENvbXBvc2l0aW9uRXZlbnQ+IGV2ZW50ID0gQ29tcG9zaXRp
b25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBkb2N1bWVu
dCgpLmRvbVdpbmRvdygpLCB0ZXh0KTsKKyAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2
ZW50KTsKICAgICB9CiAKICAgICAvLyBJZiB0ZXh0IGlzIGVtcHR5LCB0aGVuIGRlbGV0ZSB0aGUg
b2xkIGNvbXBvc2l0aW9uIGhlcmUuICBJZiB0ZXh0IGlzIG5vbi1lbXB0eSwgSW5zZXJ0VGV4dENv
bW1hbmQ6OmlucHV0CkBAIC0xNzk1LDggKzE3OTUsOCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9z
aXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxp
bgogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGV2ZW50ID0gQ29tcG9zaXRpb25F
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBkb2N1bWVudCgp
LmRvbVdpbmRvdygpLCB0ZXh0KTsKICAgICAgICAgfQotICAgICAgICBpZiAoZXZlbnQuZ2V0KCkp
Ci0gICAgICAgICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJ
T04pOworICAgICAgICBpZiAoZXZlbnQpCisgICAgICAgICAgICB0YXJnZXQtPmRpc3BhdGNoRXZl
bnQoKmV2ZW50KTsKICAgICB9CiAKICAgICAvLyBJZiB0ZXh0IGlzIGVtcHR5LCB0aGVuIGRlbGV0
ZSB0aGUgb2xkIGNvbXBvc2l0aW9uIGhlcmUuICBJZiB0ZXh0IGlzIG5vbi1lbXB0eSwgSW5zZXJ0
VGV4dENvbW1hbmQ6OmlucHV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDViNjhmNTdjZmFjMGJiY2E5ZjE4YjQyYjFhNWFi
MGIxNWZiYzg1OGIuLjc4OTcyYzc1MjI2YmRmNTRjYjc0NTQ5NzI3ODc2M2RjNDcyYTAzYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCkBAIC0xODIsMTYgKzE4MiwxNiBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVu
dEZyYWdtZW50KERvY3VtZW50JiBkb2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudCogZgogICAgIHJl
c3RvcmVBbmRSZW1vdmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7
CiAKICAgICAvLyBHaXZlIHRoZSByb290IGEgY2hhbmNlIHRvIGNoYW5nZSB0aGUgdGV4dC4KLSAg
ICBSZWZQdHI8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+IGV2dCA9IEJlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50OjpjcmVhdGUodGV4dCk7Ci0gICAgZWRpdGFibGVSb290LT5kaXNwYXRjaEV2ZW50KGV2
dCwgQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0gICAgaWYgKHRleHQgIT0gZXZ0LT50ZXh0KCkgfHwg
IWVkaXRhYmxlUm9vdC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKSB7CisgICAgUmVmPEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50PiBldmVudCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVh
dGUodGV4dCk7CisgICAgZWRpdGFibGVSb290LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBp
ZiAodGV4dCAhPSBldmVudC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhhc1JpY2hseUVkaXRh
YmxlU3R5bGUoKSkgewogICAgICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05vZGVz
VG9GcmFnbWVudChob2xkZXIuZ2V0KCkpOwogCiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dCgqcmFuZ2UsIGV2dC0+dGV4dCgpKTsKKyAgICAgICAgbV9mcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldmVudC0+dGV4dCgpKTsKICAgICAgICAgaWYgKCFt
X2ZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcAppbmRl
eCBmZDcyMTlkNjBhM2E4ZmZhNjY2ZTAxNWU1ZGExMDUyYjI2Y2MxYzVjLi5jY2MzZGRlYWUyZTdl
ODU2YmZkMjM4M2ZmZWVkNTEwYzE1NDc4YjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3BwCkBAIC02Myw5ICs2Myw5IEBAIFN0
cmluZyBkaXNwYXRjaEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgaWYgKE5vZGUqIHN0YXJ0Tm9kZSA9IHNlbGVjdGlv
bkZvckluc2VydGlvbi5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSkgewogICAgICAgICBpZiAoc3Rh
cnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkpIHsKICAgICAgICAgICAgIC8vIFNlbmQgQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQuIFRoZSBldmVudCBoYW5kbGVyIHdpbGwgdXBkYXRlIHRleHQg
aWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
PiBldnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOwotICAgICAgICAg
ICAgc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCktPmRpc3BhdGNoRXZlbnQoZXZ0LCBJ
R05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAgICAgIG5ld1RleHQgPSBldnQtPnRleHQoKTsKKyAg
ICAgICAgICAgIFJlZjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOworICAgICAgICAgICAgc3RhcnROb2RlLT5yb290
RWRpdGFibGVFbGVtZW50KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgICAgICAgICAgbmV3
VGV4dCA9IGV2ZW50LT50ZXh0KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG5ld1Rl
eHQ7CkBAIC03Nyw4ICs3Nyw4IEBAIGJvb2wgY2FuQXBwZW5kTmV3TGluZUZlZWRUb1NlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50PiBldmVudCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUoU3RyaW5nKCJcbiIp
KTsKLSAgICBub2RlLT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAg
ICBSZWY8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQ6OmNyZWF0ZShTdHJpbmcoIlxuIikpOworICAgIG5vZGUtPmRpc3BhdGNoRXZlbnQoZXZl
bnQpOwogICAgIHJldHVybiBldmVudC0+dGV4dCgpLmxlbmd0aCgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCA5NTdhOTdlYWEyNDM3ODRjYmY1MzI4
Y2RlZTcxMzBmODQ2NmUyZDhhLi4wYWQ2MWYzN2VjMjFjYjQxYTgxMjZlZTM0NjM0MjY1MDY2YWQy
ZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTUxMjAs
MTAgKzUxMjAsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyQ3VycmVudFBs
YXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoTWVkaWFQbAogICAgIHVwZGF0ZU1lZGlhU3Rh
dGUoVXBkYXRlTWVkaWFTdGF0ZTo6QXN5bmNocm9ub3VzbHkpOwogfQogCi1ib29sIEhUTUxNZWRp
YUVsZW1lbnQ6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCitib29s
IEhUTUxNZWRpYUVsZW1lbnQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAgIFJl
ZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRF
dmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50
cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KQogICAgICAgICBzY2hlZHVsZURl
bGF5ZWRBY3Rpb24oQ2hlY2tQbGF5YmFja1RhcmdldENvbXBhdGFibGl0eSk7CiAgICAgcmV0dXJu
IEhUTUxFbGVtZW50OjpkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgKaW5kZXggMDUwYWNiNDYwNzFhNGZlYzU0YWYxYzZmZTdmMzFmMGFl
MTk4MDU5My4uYTAzZjJjNGZjNmZkZWY2ZjJlYTdmMmY0ZTNlMDg1NjVhZWVmZmI1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTU2NCw3ICs1NjQsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2
ZW50KCk7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0
dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUcmFja0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVt
ZW50LmNwcAppbmRleCBkNmIxZjlhNmViNGQ3MmQ5OWUwYWQ5MWI4NTI0YjlkNGY4YzQ1MTQ1Li5i
M2ViM2I4MDRlZGI0M2M1ZTc4YjhlNGNkZTcxOWNlMGNiZGUyYzZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIEhUTUxU
cmFja0VsZW1lbnQ6OmRpZENvbXBsZXRlTG9hZChMb2FkU3RhdHVzIHN0YXR1cykKIAogICAgIGlm
IChzdGF0dXMgPT0gRmFpbHVyZSkgewogICAgICAgICBzZXRSZWFkeVN0YXRlKEhUTUxUcmFja0Vs
ZW1lbnQ6OlRSQUNLX0VSUk9SKTsKLSAgICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9O
KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjcx
LDcgKzI3MSw3IEBAIHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6ZGlkQ29tcGxldGVMb2FkKExvYWRT
dGF0dXMgc3RhdHVzKQogCiAgICAgLy8gICAgIDIuIElmIHRoZSBmaWxlIHdhcyBzdWNjZXNzZnVs
bHkgcHJvY2Vzc2VkLCBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGxvYWQgYXQgdGhlIAogICAg
IC8vICAgICAgICB0cmFjayBlbGVtZW50LgotICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9O
KTsKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVu
dCwgZmFsc2UsIGZhbHNlKSk7CiB9CiAKIC8vIE5PVEU6IFRoZSB2YWx1ZXMgaW4gdGhlIFRleHRU
cmFjazo6UmVhZGluZXNzU3RhdGUgZW51bSBtdXN0IHN0YXkgaW4gc3luYyB3aXRoIHRob3NlIGlu
IEhUTUxUcmFja0VsZW1lbnQ6OlJlYWR5U3RhdGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL01lZGlhQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29u
dHJvbGxlci5jcHAKaW5kZXggOTYzNzI0NDY3Njg3NDA0ZWQ2MmVlMzdkMDE0ZWY0ZDY1MzM3MDcy
MS4uZGJiMDJhYjllOTQ5MTIxOTQ2YTAwZWJhZDczYTE4MjBjN2YxNmIwMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcApAQCAtNTQ0LDExICs1NDQsMTEgQEAgdm9pZCBN
ZWRpYUNvbnRyb2xsZXI6OnNjaGVkdWxlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5h
bWUpCiAKIHZvaWQgTWVkaWFDb250cm9sbGVyOjphc3luY0V2ZW50VGltZXJGaXJlZCgpCiB7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IHBlbmRpbmdFdmVudHM7CisgICAgVmVjdG9yPFJlZjxF
dmVudD4+IHBlbmRpbmdFdmVudHM7CiAKICAgICBtX3BlbmRpbmdFdmVudHMuc3dhcChwZW5kaW5n
RXZlbnRzKTsKICAgICBmb3IgKGF1dG8mIHBlbmRpbmdFdmVudCA6IHBlbmRpbmdFdmVudHMpCi0g
ICAgICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50LnJlbGVhc2UoKSwgSUdOT1JFX0VYQ0VQ
VElPTik7CisgICAgICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50KTsKIH0KIAogdm9pZCBN
ZWRpYUNvbnRyb2xsZXI6OmNsZWFyUG9zaXRpb25UaW1lckZpcmVkKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L01lZGlhQ29udHJvbGxlci5oCmluZGV4IDc1MzNiNDhjMjc4ZjVkNjFjNWY2ZTAyMmNlNzRjMzYx
ODU2ODQyYmMuLjMxNWVlY2QxOTFhM2M2NzlhMTIyMGNjMGY2ZDliODNjZDBmMjUyYTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaApAQCAtMTQ1LDcgKzE0NSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX211dGVkOwogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAg
IFBsYXliYWNrU3RhdGUgbV9wbGF5YmFja1N0YXRlOwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+
PiBtX3BlbmRpbmdFdmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IG1fcGVuZGluZ0V2ZW50
czsKICAgICBUaW1lciBtX2FzeW5jRXZlbnRUaW1lcjsKICAgICBtdXRhYmxlIFRpbWVyIG1fY2xl
YXJQb3NpdGlvblRpbWVyOwogICAgIFN0cmluZyBtX21lZGlhR3JvdXA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CmluZGV4IDMzMGM5NTA0YjA3NjlkOTQwNzIzMTdkZGQyOTkzZDI5OGI5ZjlhZGMuLmVkMzA0OWQz
ODY2NjQ5NDVlMDk5ZDY2M2RhODI5ZGI2NTkyMzhkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC00
NzY2LDcgKzQ3NjYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVT
dGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQogewotICAgIFJlZlB0cjxX
ZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCAiIik7CisgICAgUmVm
PFdlYkdMQ29udGV4dEV2ZW50PiBldmVudCA9IFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLndlYmdsY29udGV4dGxvc3RFdmVudCwgZmFsc2UsIHRydWUsICIiKTsKICAgICBj
YW52YXMoKS0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgbV9yZXN0b3JlQWxsb3dlZCA9IGV2
ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJl
YWxMb3N0Q29udGV4dCAmJiBtX3Jlc3RvcmVBbGxvd2VkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCBlZWEwZWM3NTc1ZDc3M2M4YjQ5
NTU1Yjg2ZDY0Yjk4MDNmZWZhY2I4Li5lZGIwNjI3MmNjODAxOTQ3OThiZmEyZmVmMGI0YjA0MWJh
ZDFhZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVu
bmVyLmNwcApAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgVVJMIGRvY3VtZW50VVJMRm9yU2NyaXB0
RXhlY3V0aW9uKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gZG9jdW1lbnQtPmZyYW1l
KCktPmRvY3VtZW50KCktPnVybCgpOwogfQogCi1pbmxpbmUgUGFzc1JlZlB0cjxFdmVudD4gY3Jl
YXRlU2NyaXB0TG9hZEV2ZW50KCkKK2lubGluZSBSZWY8RXZlbnQ+IGNyZWF0ZVNjcmlwdExvYWRF
dmVudCgpCiB7CiAgICAgcmV0dXJuIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVu
dCwgZmFsc2UsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlLmNwcAppbmRleCBjMjQ1OGQyNWVhOTQ4M2Y0ZDg2YTYzYzUwODY3NjVkNWY1NjM4ZTE0Li5h
NmIxZGJiODg0NGU3MzExYzU2YTg0Yjg1YjM4ZDM3NzFiMTM2MTI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBU
ZXh0VHJhY2tDdWU6OmludmFsaWRhdGVDdWVJbmRleCgpCiAgICAgbV9jdWVJbmRleCA9IGludmFs
aWRDdWVJbmRleDsKIH0KIAotYm9vbCBUZXh0VHJhY2tDdWU6OmRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZXZlbnQpCitib29sIFRleHRUcmFja0N1ZTo6ZGlzcGF0Y2hFdmVudChFdmVu
dCYgZXZlbnQpCiB7CiAgICAgLy8gV2hlbiBhIFRleHRUcmFjaydzIG1vZGUgaXMgZGlzYWJsZWQ6
IG5vIGN1ZXMgYXJlIGFjdGl2ZSwgbm8gZXZlbnRzIGZpcmVkLgogICAgIGlmICghdHJhY2soKSB8
fCB0cmFjaygpLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpkaXNhYmxlZEtleXdvcmQoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCmluZGV4IGVjMmFiMjJlMmY3NjNlODQw
N2ZhM2QxODlkOTZkYmMwZThkNmNiODIuLjY0ZTZmZDI1MGJjZjFiMzk5ZGMyMzNlM2Y0MTIxZWRh
ODhjYTVkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaApAQCAt
NzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlQ3VlSW5kZXgoKTsKIAog
ICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc0FjdGl2ZSgp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjdGl2ZShib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCmluZGV4IDc4NGIzYTNlNDBiZGYyYWEwMmEyNTVlYjhlY2QyOThjYzUw
NGEwZTQuLjFiYWU0YTI0MDU5MTI1MTBlOGMyNzM5NzMyOTNhMDk0NGNhMDEyOTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMjg1OSw3ICsyODU5LDcgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6ZGlzcGF0Y2hVbmxvYWRFdmVudHMoVW5sb2FkRXZlbnRQb2xpY3kgdW5sb2Fk
RXZlbnRQb2xpY3kpCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE2NzcwCiAKICAgICAgICAgICAgIGlmICghbV9mcmFtZS5kb2N1bWVudCgp
LT5pblBhZ2VDYWNoZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEV2ZW50PiB1bmxvYWRF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZmFsc2UsIGZhbHNl
KSk7CisgICAgICAgICAgICAgICAgUmVmPEV2ZW50PiB1bmxvYWRFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIERvY3VtZW50TG9hZGVyIChhbmQgdGh1cyBpdHMgRG9jdW1lbnRMb2FkVGltaW5n
KSBtaWdodCBnZXQgZGVzdHJveWVkCiAgICAgICAgICAgICAgICAgLy8gd2hpbGUgZGlzcGF0Y2hp
bmcgdGhlIGV2ZW50LCBzbyBwcm90ZWN0IGl0IHRvIHByZXZlbnQgd3JpdGluZyB0aGUgZW5kCiAg
ICAgICAgICAgICAgICAgLy8gdGltZSBpbnRvIGZyZWVkIG1lbW9yeS4KQEAgLTI5MDUsMTggKzI5
MDUsMTggQEAgYm9vbCBGcmFtZUxvYWRlcjo6ZGlzcGF0Y2hCZWZvcmVVbmxvYWRFdmVudChDaHJv
bWUmIGNocm9tZSwgRnJhbWVMb2FkZXIqIGZyYW1lTG8KICAgICBpZiAoIWRvY3VtZW50LT5ib2R5
T3JGcmFtZXNldCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBSZWZQdHI8QmVm
b3JlVW5sb2FkRXZlbnQ+IGJlZm9yZVVubG9hZEV2ZW50ID0gQmVmb3JlVW5sb2FkRXZlbnQ6OmNy
ZWF0ZSgpOworICAgIFJlZjxCZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2FkRXZlbnQgPSBC
ZWZvcmVVbmxvYWRFdmVudDo6Y3JlYXRlKCk7CiAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWlu
Z0Rpc3BhdGNoZWQgPSBQYWdlRGlzbWlzc2FsVHlwZTo6QmVmb3JlVW5sb2FkOwogCiAgICAgewog
ICAgICAgICBGb3JiaWRQcm9tcHRzU2NvcGUgZm9yYmlkUHJvbXB0cyhtX2ZyYW1lLnBhZ2UoKSk7
Ci0gICAgICAgIGRvbVdpbmRvdy0+ZGlzcGF0Y2hFdmVudChiZWZvcmVVbmxvYWRFdmVudC5nZXQo
KSwgZG9tV2luZG93LT5kb2N1bWVudCgpKTsKKyAgICAgICAgZG9tV2luZG93LT5kaXNwYXRjaEV2
ZW50KGJlZm9yZVVubG9hZEV2ZW50LCBkb21XaW5kb3ctPmRvY3VtZW50KCkpOwogICAgIH0KIAog
ICAgIG1fcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gUGFnZURpc21pc3NhbFR5
cGU6Ok5vbmU7CiAKICAgICBpZiAoIWJlZm9yZVVubG9hZEV2ZW50LT5kZWZhdWx0UHJldmVudGVk
KCkpCi0gICAgICAgIGRvY3VtZW50LT5kZWZhdWx0RXZlbnRIYW5kbGVyKGJlZm9yZVVubG9hZEV2
ZW50LmdldCgpKTsKKyAgICAgICAgZG9jdW1lbnQtPmRlZmF1bHRFdmVudEhhbmRsZXIoYmVmb3Jl
VW5sb2FkRXZlbnQucHRyKCkpOwogICAgIGlmIChiZWZvcmVVbmxvYWRFdmVudC0+cmV0dXJuVmFs
dWUoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCmluZGV4
IDk4OTA5OTQwZTM0NGYzYjI4NmIyMGNiNTFhZDEyMDgwNmYyMjNkMjMuLjg4ZTdlZTJiMjUzMWRm
ZjcxNzYxZjJjNWU3MGNlNDgyZTg4YmE0ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcApAQCAtMzUwLDcgKzM1
MCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUhvc3Q6OmRpc3BhdGNoRE9NRXZlbnQoRXZlbnRJ
RCBpZCwgaW50IHRvdGFsLCBpbnQgZG9uZSkKICAgICAgICAgICAgIGV2ZW50ID0gUHJvZ3Jlc3NF
dmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgdHJ1ZSwgZG9uZSwgdG90YWwpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFs
c2UpOwotICAgICAgICBtX2RvbUFwcGxpY2F0aW9uQ2FjaGUtPmRpc3BhdGNoRXZlbnQoZXZlbnQs
IEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICBtX2RvbUFwcGxpY2F0aW9uQ2FjaGUtPmRp
c3BhdGNoRXZlbnQoKmV2ZW50KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cAppbmRleCAxZWZhZWI0MWE3OGYyZWNhOTg4NTNmNzcyMWQ5ZThlNWY5NDVlODU5Li5mODllMTk0
Njg4OTRmMzUzMDJkZDU1Y2YwNGUzMWMwZTZjMmE5NjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBQ
YXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKKyAgICBSZWY8TWVzc2FnZUV2ZW50PiBldmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQogICAgIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0QXJy
YXk+IG1lc3NhZ2VQb3J0cyA9IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCpjb250ZXh0LCBX
VEY6Om1vdmUobV9jaGFubmVscykpOwogICAgICAgICByZXR1cm4gTWVzc2FnZUV2ZW50OjpjcmVh
dGUoV1RGOjptb3ZlKG1lc3NhZ2VQb3J0cyksIG1fbWVzc2FnZSwgbV9vcmlnaW4sIFN0cmluZygp
LCBtX3NvdXJjZSk7CkBAIC05MjgsNyArOTI4LDcgQEAgdm9pZCBET01XaW5kb3c6OnBvc3RNZXNz
YWdlVGltZXJGaXJlZChQb3N0TWVzc2FnZVRpbWVyJiB0aW1lcikKICAgICBkaXNwYXRjaE1lc3Nh
Z2VFdmVudFdpdGhPcmlnaW5DaGVjayh0aW1lci50YXJnZXRPcmlnaW4oKSwgdGltZXIuZXZlbnQo
ZG9jdW1lbnQoKSksIHRpbWVyLnN0YWNrVHJhY2UoKSk7CiB9CiAKLXZvaWQgRE9NV2luZG93Ojpk
aXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhPcmlnaW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5k
ZWRUYXJnZXRPcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPFNjcmlw
dENhbGxTdGFjaz4gc3RhY2tUcmFjZSkKK3ZvaWQgRE9NV2luZG93OjpkaXNwYXRjaE1lc3NhZ2VF
dmVudFdpdGhPcmlnaW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5kZWRUYXJnZXRPcmlnaW4s
IEV2ZW50JiBldmVudCwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IHN0YWNrVHJhY2UpCiB7
CiAgICAgaWYgKGludGVuZGVkVGFyZ2V0T3JpZ2luKSB7CiAgICAgICAgIC8vIENoZWNrIHRhcmdl
dCBvcmlnaW4gbm93IHNpbmNlIHRoZSB0YXJnZXQgZG9jdW1lbnQgbWF5IGhhdmUgY2hhbmdlZCBz
aW5jZSB0aGUgdGltZXIgd2FzIHNjaGVkdWxlZC4KQEAgLTE4NzAsNyArMTg3MCw3IEBAIGJvb2wg
RE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBFdmVudExpc3RlbmVyCiAKIHZvaWQgRE9NV2luZG93OjpkaXNwYXRjaExvYWRFdmVudCgp
CiB7Ci0gICAgUmVmUHRyPEV2ZW50PiBsb2FkRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICBSZWY8RXZlbnQ+IGxvYWRFdmVudCA9
IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAg
ICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpICYmICFt
X2ZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT50aW1pbmcoKS5sb2FkRXZlbnRTdGFy
dCgpKSB7CiAgICAgICAgIC8vIFRoZSBEb2N1bWVudExvYWRlciAoYW5kIHRodXMgaXRzIERvY3Vt
ZW50TG9hZFRpbWluZykgbWlnaHQgZ2V0IGRlc3Ryb3llZCB3aGlsZSBkaXNwYXRjaGluZwogICAg
ICAgICAvLyB0aGUgZXZlbnQsIHNvIHByb3RlY3QgaXQgdG8gcHJldmVudCB3cml0aW5nIHRoZSBl
bmQgdGltZSBpbnRvIGZyZWVkIG1lbW9yeS4KQEAgLTE4OTIsMzQgKzE4OTIsMzMgQEAgdm9pZCBE
T01XaW5kb3c6OmRpc3BhdGNoTG9hZEV2ZW50KCkKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmxvYWRFdmVudEZpcmVkKGZyYW1lKCkpOwogfQogCi1ib29sIERPTVdpbmRvdzo6ZGlzcGF0
Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCwgUGFzc1JlZlB0cjxFdmVudFRhcmdl
dD4gcHJwVGFyZ2V0KQorYm9vbCBET01XaW5kb3c6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50
LCBFdmVudFRhcmdldCogdGFyZ2V0KQogewogICAgIFJlZjxFdmVudFRhcmdldD4gcHJvdGVjdCgq
dGhpcyk7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwogCiAgICAgLy8gUGF1
c2luZyBhIHBhZ2UgbWF5IHRyaWdnZXIgcGFnZWhpZGUgYW5kIHBhZ2VzaG93IGV2ZW50cy4gV2Vi
Q29yZSBhbHNvIGltcGxpY2l0bHkgZmlyZXMgdGhlc2UKICAgICAvLyBldmVudHMgd2hlbiBjbG9z
aW5nIGEgV2ViVmlldy4gSGVyZSB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBzdGF0ZSBvZiB0aGUgcGFn
ZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSwKICAgICAvLyB1bmJhbGFuY2VkIGV2ZW50cyBwZXIgdGhl
IGRlZmluaXRpb24gb2YgdGhlIHBhZ2VzaG93IGV2ZW50OgogICAgIC8vIDxodHRwOi8vd3d3Lndo
YXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9oaXN0b3J5Lmh0
bWwjZXZlbnQtcGFnZXNob3c+LgotICAgIGlmIChldmVudC0+ZXZlbnRJbnRlcmZhY2UoKSA9PSBQ
YWdlVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlVHlwZSkgewotICAgICAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZXNob3dFdmVudCkgeworICAgIGlmIChldmVudC5ldmVu
dEludGVyZmFjZSgpID09IFBhZ2VUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VUeXBlKSB7CisgICAg
ICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnBhZ2VzaG93RXZlbnQpIHsKICAg
ICAgICAgICAgIGlmIChtX2xhc3RQYWdlU3RhdHVzID09IFBhZ2VTdGF0dXNTaG93bikKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRXZlbnQgd2FzIHByZXZpb3VzbHkgZGlzcGF0Y2hl
ZDsgZG8gbm90IGZpcmUgYSBkdXBsaWNhdGUgZXZlbnQuCiAgICAgICAgICAgICBtX2xhc3RQYWdl
U3RhdHVzID0gUGFnZVN0YXR1c1Nob3duOwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChl
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQpIHsKICAgICAgICAgICAg
IGlmIChtX2xhc3RQYWdlU3RhdHVzID09IFBhZ2VTdGF0dXNIaWRkZW4pCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIEV2ZW50IHdhcyBwcmV2aW91c2x5IGRpc3BhdGNoZWQ7IGRvIG5v
dCBmaXJlIGEgZHVwbGljYXRlIGV2ZW50LgogICAgICAgICAgICAgbV9sYXN0UGFnZVN0YXR1cyA9
IFBhZ2VTdGF0dXNIaWRkZW47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBldmVudC0+c2V0VGFy
Z2V0KHBycFRhcmdldCA/IHBycFRhcmdldCA6IHRoaXMpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50
VGFyZ2V0KHRoaXMpOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQp
OworICAgIGV2ZW50LnNldFRhcmdldCh0YXJnZXQgPyB0YXJnZXQgOiB0aGlzKTsKKyAgICBldmVu
dC5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoRXZlbnQ6
OkFUX1RBUkdFVCk7CiAKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2ll
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93KGZy
YW1lKCksICpldmVudCwgKnRoaXMpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50T25X
aW5kb3coZnJhbWUoKSwgZXZlbnQsICp0aGlzKTsKIAotICAgIGJvb2wgcmVzdWx0ID0gZmlyZUV2
ZW50TGlzdGVuZXJzKGV2ZW50LmdldCgpKTsKKyAgICBib29sIHJlc3VsdCA9IGZpcmVFdmVudExp
c3RlbmVycyhldmVudCk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZERpc3Bh
dGNoRXZlbnRPbldpbmRvdyhjb29raWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAppbmRleCAw
ZDhkOTUzNWFiNzQzZDkyOTY3NWE1YmM0MGIxNDQyOGI4YzUyN2VkLi5iNTAwMWJjZjFiNzA2ZmU3
MGViNDhmNGE3ODcxZTcyNmIyYmExYTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKQEAgLTI0
NCw3ICsyNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIE5lZWRlZCBmb3Ig
T2JqZWN0aXZlLUMgYmluZGluZ3MgKHNlZSBidWcgMjg3NzQpLgogICAgICAgICB2b2lkIHBvc3RN
ZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBNZXNzYWdl
UG9ydCosIGNvbnN0IFN0cmluZyYgdGFyZ2V0T3JpZ2luLCBET01XaW5kb3cmIHNvdXJjZSwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlVGltZXJGaXJlZChQb3N0TWVz
c2FnZVRpbWVyJik7Ci0gICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRoT3JpZ2lu
Q2hlY2soU2VjdXJpdHlPcmlnaW4qIGludGVuZGVkVGFyZ2V0T3JpZ2luLCBQYXNzUmVmUHRyPEV2
ZW50PiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4pOworICAgICAgICB2
b2lkIGRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3VyaXR5T3JpZ2luKiBp
bnRlbmRlZFRhcmdldE9yaWdpbiwgRXZlbnQmLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0
Q2FsbFN0YWNrPik7CiAKICAgICAgICAgdm9pZCBzY3JvbGxCeShpbnQgeCwgaW50IHkpIGNvbnN0
OwogICAgICAgICB2b2lkIHNjcm9sbFRvKGludCB4LCBpbnQgeSkgY29uc3Q7CkBAIC0yNzgsNyAr
Mjc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
QWxsRXZlbnRMaXN0ZW5lcnMoKSBvdmVycmlkZTsKIAogICAgICAgICB1c2luZyBFdmVudFRhcmdl
dDo6ZGlzcGF0Y2hFdmVudDsKLSAgICAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IHBycEV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBUYXJnZXQpOworICAg
ICAgICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmLCBFdmVudFRhcmdldCopOwogCiAgICAgICAg
IHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29u
dHJvbGxlci5jcHAKaW5kZXggOTI1NzU0ZWM0MzYxMGU3YTdmNjk5YjY4NDgxNTJlNzJjODVhZjYy
MS4uM2MzODQzMDk1NjM0OTYyMmFlMmUxOWZkNWI3NjAzODVjOTU5MDRjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwCkBAIC03MSw5ICs3MSw4IEBAIHZvaWQgRGV2
aWNlQ29udHJvbGxlcjo6cmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnMoRE9NV2luZG93KiB3
aW5kb3cpCiAgICAgICAgIG1fY2xpZW50LT5zdG9wVXBkYXRpbmcoKTsKIH0KIAotdm9pZCBEZXZp
Y2VDb250cm9sbGVyOjpkaXNwYXRjaERldmljZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2
ZW50KQordm9pZCBEZXZpY2VDb250cm9sbGVyOjpkaXNwYXRjaERldmljZUV2ZW50KEV2ZW50JiBl
dmVudCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CiAgICAgVmVjdG9y
PFJlZlB0cjxET01XaW5kb3c+PiBsaXN0ZW5lclZlY3RvcjsKICAgICBjb3B5VG9WZWN0b3IobV9s
aXN0ZW5lcnMsIGxpc3RlbmVyVmVjdG9yKTsKICAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogbGlz
dGVuZXJWZWN0b3IpIHsKQEAgLTkzLDggKzkyLDEwIEBAIHZvaWQgRGV2aWNlQ29udHJvbGxlcjo6
ZmlyZURldmljZUV2ZW50KCkKICAgICBtX2xhc3RFdmVudExpc3RlbmVycy5jbGVhcigpOwogICAg
IGZvciAoYXV0byYgbGlzdGVuZXIgOiBsaXN0ZW5lclZlY3RvcikgewogICAgICAgICBhdXRvIGRv
Y3VtZW50ID0gbGlzdGVuZXItPmRvY3VtZW50KCk7Ci0gICAgICAgIGlmIChkb2N1bWVudCAmJiAh
ZG9jdW1lbnQtPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSAmJiAhZG9jdW1lbnQtPmFj
dGl2ZURPTU9iamVjdHNBcmVTdG9wcGVkKCkpCi0gICAgICAgICAgICBsaXN0ZW5lci0+ZGlzcGF0
Y2hFdmVudChnZXRMYXN0RXZlbnQoKSk7CisgICAgICAgIGlmIChkb2N1bWVudCAmJiAhZG9jdW1l
bnQtPmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSAmJiAhZG9jdW1lbnQtPmFjdGl2ZURP
TU9iamVjdHNBcmVTdG9wcGVkKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGxhc3RFdmVudCA9
IGdldExhc3RFdmVudCgpKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5kaXNwYXRjaEV2ZW50
KCpsYXN0RXZlbnQpOworICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2
aWNlQ29udHJvbGxlci5oCmluZGV4IGZkZjVkMWQ5NmQxNTc3Njc2Y2E5MDlmOTE4OTNjNTdmOTgw
OGE1Y2YuLjIxODYxZjI0ZTVlNDM4ZTcwMDJkNzlmMTIzZTY4YmNiOWJhMDg4NGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5oCkBAIC00OCwxMiArNDgsMTIgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVtb3ZlRGV2aWNlRXZlbnRMaXN0ZW5lcihET01XaW5kb3cqKTsKICAgICB2
b2lkIHJlbW92ZUFsbERldmljZUV2ZW50TGlzdGVuZXJzKERPTVdpbmRvdyopOwogCi0gICAgdm9p
ZCBkaXNwYXRjaERldmljZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGRpc3Bh
dGNoRGV2aWNlRXZlbnQoRXZlbnQmKTsKICAgICBib29sIGlzQWN0aXZlKCkgeyByZXR1cm4gIW1f
bGlzdGVuZXJzLmlzRW1wdHkoKTsgfQogICAgIERldmljZUNsaWVudCogY2xpZW50KCkgeyByZXR1
cm4gbV9jbGllbnQ7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQoKSB7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBSZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIHsg
cmV0dXJuIG51bGxwdHI7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmlyZURldmljZUV2ZW50
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDA1MGI2Mjg5NWFl
YTczNjQ5ZDJhZTQ2NGU1OWZjNjgzZjFhNmI5ZDAuLmRhYTBmOThmOWMwYTI1NjZlMTA4OWU1MGQ5
ZGQ1NjBiOGVkZjc3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBA
IC00NDYsNyArNDQ2LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6ZGlzcGF0Y2hUZXh0SW5wdXRF
dmVudEZvcihGcmFtZSogaW5uZXJGcmFtZSwgRHJhZ0RhdGEmIGRyYWcKICAgICBBU1NFUlQobV9w
YWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5oYXNDYXJldCgpKTsKICAgICBTdHJpbmcgdGV4dCA9
IG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSA/
IGVtcHR5U3RyaW5nKCkgOiBkcmFnRGF0YS5hc1BsYWluVGV4dCgpOwogICAgIE5vZGUqIHRhcmdl
dCA9IGlubmVyRnJhbWUtPmVkaXRvcigpLmZpbmRFdmVudFRhcmdldEZyb20obV9wYWdlLmRyYWdD
YXJldENvbnRyb2xsZXIoKS5jYXJldFBvc2l0aW9uKCkpOwotICAgIHJldHVybiB0YXJnZXQtPmRp
c3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JEcm9wKGlubmVyRnJhbWUtPmRvY3VtZW50
KCktPmRvbVdpbmRvdygpLCB0ZXh0KSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgcmV0dXJuIHRh
cmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3AoaW5uZXJGcmFtZS0+
ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHRleHQpKTsKIH0KIAogYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKaW5kZXggNjcwZTEzNWYzZDM0ZmQzMzY2ZDM4OGE2ZTkwMDZjNzVjMWVk
NGZhMy4uYmY4ZmJhNzU2MTBiY2MxNTNmMzYwYjJiY2NlYzg3MmFjZTE2MjQxYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzAxMiwxMyArMzAxMiwxMyBAQCBib29sIEV2
ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbml0aWFs
S2V5RXZlbnQpCiAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleURvd25FdmVudCA9IGluaXRp
YWxLZXlFdmVudDsgICAgCiAgICAgaWYgKGtleURvd25FdmVudC50eXBlKCkgIT0gUGxhdGZvcm1F
dmVudDo6UmF3S2V5RG93bikKICAgICAgICAga2V5RG93bkV2ZW50LmRpc2FtYmlndWF0ZUtleURv
d25FdmVudChQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duLCBiYWNrd2FyZENvbXBhdGliaWxpdHlN
b2RlKTsKLSAgICBSZWZQdHI8S2V5Ym9hcmRFdmVudD4ga2V5ZG93biA9IEtleWJvYXJkRXZlbnQ6
OmNyZWF0ZShrZXlEb3duRXZlbnQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7
CisgICAgUmVmPEtleWJvYXJkRXZlbnQ+IGtleWRvd24gPSBLZXlib2FyZEV2ZW50OjpjcmVhdGUo
a2V5RG93bkV2ZW50LCBtX2ZyYW1lLmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCkpOwogICAgIGlm
IChtYXRjaGVkQW5BY2Nlc3NLZXkpCiAgICAgICAgIGtleWRvd24tPnNldERlZmF1bHRQcmV2ZW50
ZWQodHJ1ZSk7CiAgICAga2V5ZG93bi0+c2V0VGFyZ2V0KGVsZW1lbnQpOwogCiAgICAgaWYgKGlu
aXRpYWxLZXlFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6UmF3S2V5RG93bikgewotICAg
ICAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGtleWRvd24sIElHTk9SRV9FWENFUFRJT04pOwor
ICAgICAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGtleWRvd24pOwogICAgICAgICAvLyBJZiBm
cmFtZSBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mIGtleWRvd24gZGlzcGF0Y2gsIHRoZW4gcmV0dXJu
IHRydWUgdG8gYXZvaWQgc2VuZGluZyBhIHN1YnNlcXVlbnQga2V5cHJlc3MgbWVzc2FnZSB0byB0
aGUgbmV3IGZyYW1lLgogICAgICAgICBib29sIGNoYW5nZWRGb2N1c2VkRnJhbWUgPSBtX2ZyYW1l
LnBhZ2UoKSAmJiAmbV9mcmFtZSAhPSAmbV9mcmFtZS5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgICAgICByZXR1cm4ga2V5ZG93bi0+ZGVmYXVsdEhh
bmRsZWQoKSB8fCBrZXlkb3duLT5kZWZhdWx0UHJldmVudGVkKCkgfHwgY2hhbmdlZEZvY3VzZWRG
cmFtZTsKQEAgLTMwMjksNyArMzAyOSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChj
b25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkKICAgICAvLyBpbiBv
cmRlciB0byBtYXRjaCBJRToKICAgICAvLyAxLiBwcmV2ZW50aW5nIGRlZmF1bHQgaGFuZGxpbmcg
b2Yga2V5ZG93biBhbmQga2V5cHJlc3MgZXZlbnRzIGhhcyBubyBlZmZlY3Qgb24gSU0gaW5wdXQ7
CiAgICAgLy8gMi4gaWYgYW4gaW5wdXQgbWV0aG9kIGhhbmRsZXMgdGhlIGV2ZW50LCBpdHMga2V5
Q29kZSBpcyBzZXQgdG8gMjI5IGluIGtleWRvd24gZXZlbnQuCi0gICAgbV9mcmFtZS5lZGl0b3Io
KS5oYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oa2V5ZG93bi5nZXQoKSk7CisgICAgbV9mcmFtZS5l
ZGl0b3IoKS5oYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oa2V5ZG93bi5wdHIoKSk7CiAgICAgCiAg
ICAgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9IGtleWRvd24tPmRlZmF1bHRIYW5kbGVkKCk7
CiAgICAgCkBAIC0zMDQwLDEwICszMDQwLDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVu
dChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkKICAgICAgICAg
a2V5ZG93bi0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKGFjY2Vz
c2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oa2V5ZG93bi5nZXQoKSkpCisgICAgaWYg
KGFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oa2V5ZG93bikpCiAgICAgICAg
IGtleWRvd24tPnN0b3BQcm9wYWdhdGlvbigpOwogCi0gICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVu
dChrZXlkb3duLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50
KGtleWRvd24pOwogICAgIC8vIElmIGZyYW1lIGNoYW5nZWQgYXMgYSByZXN1bHQgb2Yga2V5ZG93
biBkaXNwYXRjaCwgdGhlbiByZXR1cm4gZWFybHkgdG8gYXZvaWQgc2VuZGluZyBhIHN1YnNlcXVl
bnQga2V5cHJlc3MgbWVzc2FnZSB0byB0aGUgbmV3IGZyYW1lLgogICAgIGJvb2wgY2hhbmdlZEZv
Y3VzZWRGcmFtZSA9IG1fZnJhbWUucGFnZSgpICYmICZtX2ZyYW1lICE9ICZtX2ZyYW1lLnBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgYm9vbCBrZXlk
b3duUmVzdWx0ID0ga2V5ZG93bi0+ZGVmYXVsdEhhbmRsZWQoKSB8fCBrZXlkb3duLT5kZWZhdWx0
UHJldmVudGVkKCkgfHwgY2hhbmdlZEZvY3VzZWRGcmFtZTsKQEAgLTMwNjIsMTQgKzMwNjIsMTQg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCYgaW5pdGlhbEtleUV2ZW50KQogICAgIGtleVByZXNzRXZlbnQuZGlzYW1iaWd1YXRlS2V5RG93
bkV2ZW50KFBsYXRmb3JtRXZlbnQ6OkNoYXIsIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpOwog
ICAgIGlmIChrZXlQcmVzc0V2ZW50LnRleHQoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBr
ZXlkb3duUmVzdWx0OwotICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBrZXlwcmVzcyA9IEtleWJv
YXJkRXZlbnQ6OmNyZWF0ZShrZXlQcmVzc0V2ZW50LCBtX2ZyYW1lLmRvY3VtZW50KCktPmRlZmF1
bHRWaWV3KCkpOworICAgIFJlZjxLZXlib2FyZEV2ZW50PiBrZXlwcmVzcyA9IEtleWJvYXJkRXZl
bnQ6OmNyZWF0ZShrZXlQcmVzc0V2ZW50LCBtX2ZyYW1lLmRvY3VtZW50KCktPmRlZmF1bHRWaWV3
KCkpOwogICAgIGtleXByZXNzLT5zZXRUYXJnZXQoZWxlbWVudCk7CiAgICAgaWYgKGtleWRvd25S
ZXN1bHQpCiAgICAgICAgIGtleXByZXNzLT5zZXREZWZhdWx0UHJldmVudGVkKHRydWUpOwogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIGtleXByZXNzLT5rZXlwcmVzc0NvbW1hbmRzKCkgPSBrZXlk
b3duLT5rZXlwcmVzc0NvbW1hbmRzKCk7CiAjZW5kaWYKLSAgICBlbGVtZW50LT5kaXNwYXRjaEV2
ZW50KGtleXByZXNzLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBlbGVtZW50LT5kaXNwYXRjaEV2
ZW50KGtleXByZXNzKTsKIAogICAgIHJldHVybiBrZXlkb3duUmVzdWx0IHx8IGtleXByZXNzLT5k
ZWZhdWx0UHJldmVudGVkKCkgfHwga2V5cHJlc3MtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CkBAIC0z
MTg2LDcgKzMxODYsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5Ym9hcmRTZWxlY3Rp
b25Nb3ZlbWVudEZvckFjY2Vzc2liaWxpdHkoS2V5Ym9hcmRFdmVudAogICAgIH0KIH0KIAotYm9v
bCBFdmVudEhhbmRsZXI6OmFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oS2V5
Ym9hcmRFdmVudCogZXZlbnQpCitib29sIEV2ZW50SGFuZGxlcjo6YWNjZXNzaWJpbGl0eVByZXZl
bnRzRXZlbnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmhhbmNlZFVz
ZXJJbnRlcmZhY2VFbmFibGVkKCkpCkBAIC0zMTk2LDkgKzMxOTYsOSBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6YWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50
KiBldmVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hlY2sgZm9yIGtleSBl
dmVudHMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gYWNjZXNzaWJpbGl0eTogdGFiIGFuZCBhcnJvd3Mg
a2V5cyB0aGF0IGNoYW5nZSBmb2N1cwotICAgIGlmIChldmVudC0+a2V5SWRlbnRpZmllcigpID09
ICJVKzAwMDkiKQorICAgIGlmIChldmVudC5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwOSIpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGZvY3Vz
RGlyZWN0aW9uRm9yS2V5KGV2ZW50LT5rZXlJZGVudGlmaWVyKCkpOworICAgIEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbiA9IGZvY3VzRGlyZWN0aW9uRm9yS2V5KGV2ZW50LmtleUlkZW50aWZpZXIo
KSk7CiAgICAgaWYgKGRpcmVjdGlvbiAhPSBGb2N1c0RpcmVjdGlvbk5vbmUpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogI2Vsc2UKQEAgLTM0OTQsMTAgKzM0OTQsMTAgQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVy
bHlpbmdFdmUKICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCkpCiAgICAg
ICAgIHZpZXctPmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJh
Y3Rpb24oKTsKIAotICAgIFJlZlB0cjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVh
dGUobV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgaW5wdXRUeXBlKTsKKyAg
ICBSZWY8VGV4dEV2ZW50PiBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlKG1fZnJhbWUuZG9jdW1l
bnQoKS0+ZG9tV2luZG93KCksIHRleHQsIGlucHV0VHlwZSk7CiAgICAgZXZlbnQtPnNldFVuZGVy
bHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQpOwogCi0gICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50
KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZl
bnQpOwogICAgIHJldHVybiBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKTsKIH0KICAgICAKQEAgLTM4
OTksMTEgKzM4OTksMTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29u
c3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgICAgIFJlZlB0cjxUb3VjaExp
c3Q+IHRhcmdldFRvdWNoZXMoaXNUb3VjaENhbmNlbEV2ZW50ID8gZW1wdHlMaXN0IDogdG91Y2hl
c0J5VGFyZ2V0LmdldCh0b3VjaEV2ZW50VGFyZ2V0KSk7CiAgICAgICAgICAgICBBU1NFUlQodGFy
Z2V0VG91Y2hlcyk7CiAKLSAgICAgICAgICAgIFJlZlB0cjxUb3VjaEV2ZW50PiB0b3VjaEV2ZW50
ID0KKyAgICAgICAgICAgIFJlZjxUb3VjaEV2ZW50PiB0b3VjaEV2ZW50ID0KICAgICAgICAgICAg
ICAgICBUb3VjaEV2ZW50OjpjcmVhdGUoZWZmZWN0aXZlVG91Y2hlcy5nZXQoKSwgdGFyZ2V0VG91
Y2hlcy5nZXQoKSwgY2hhbmdlZFRvdWNoZXNbc3RhdGVdLm1fdG91Y2hlcy5nZXQoKSwKICAgICAg
ICAgICAgICAgICAgICAgc3RhdGVOYW1lLCB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZG9j
dW1lbnQoKS5kZWZhdWx0VmlldygpLAogICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBl
dmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBldmVudC5t
ZXRhS2V5KCkpOwotICAgICAgICAgICAgdG91Y2hFdmVudFRhcmdldC0+dG9Ob2RlKCktPmRpc3Bh
dGNoVG91Y2hFdmVudCh0b3VjaEV2ZW50LmdldCgpKTsKKyAgICAgICAgICAgIHRvdWNoRXZlbnRU
YXJnZXQtPnRvTm9kZSgpLT5kaXNwYXRjaFRvdWNoRXZlbnQodG91Y2hFdmVudCk7CiAgICAgICAg
ICAgICBzd2FsbG93ZWRFdmVudCA9IHN3YWxsb3dlZEV2ZW50IHx8IHRvdWNoRXZlbnQtPmRlZmF1
bHRQcmV2ZW50ZWQoKSB8fCB0b3VjaEV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICB9
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggM2Q1NzU4ODRhOWJhODYw
N2E3OWE3ZmQ0N2M3NmQxNzQzMjNiOTM4Ny4uMjQzNWRhMDE1MTE4M2FlNmQzZmFhOTlkZTQ5NzY3
MTU3M2E5M2M5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0yNDcsNyArMjQ3
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wga2V5RXZlbnQoY29uc3QgUGxh
dGZvcm1LZXlib2FyZEV2ZW50Jik7CiAgICAgdm9pZCBkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRs
ZXIoS2V5Ym9hcmRFdmVudCopOwogCi0gICAgYm9vbCBhY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVu
dFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQqKTsKKyAgICBib29sIGFjY2Vzc2liaWxpdHlQcmV2
ZW50c0V2ZW50UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgaGFuZGxlS2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudEZvckFjY2Vzc2liaWxpdHkoS2V5
Ym9hcmRFdmVudCopOwogCiAgICAgYm9vbCBoYW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBTdHJp
bmcmIHRleHQsIEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQgPSBudWxscHRyLCBUZXh0RXZlbnRJbnB1
dFR5cGUgPSBUZXh0RXZlbnRJbnB1dEtleWJvYXJkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJj
ZS5jcHAKaW5kZXggOWY5MGIwMWIxNTg1NDA4ZjY2MGQ3YjFkMDBlYzk2ZmM4MTJmYWRiNy4uNGEx
MDE1MTJkNjg2NjM4ODYwMGVkNzMyZmMzY2E4NDE2ZjdhNDBiYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudFNvdXJjZS5jcHAKQEAgLTQxMCwxMSArNDEwLDExIEBAIGJvb2wgRXZlbnRTb3VyY2U6OmNh
blN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFz
c1JlZlB0cjxNZXNzYWdlRXZlbnQ+IEV2ZW50U291cmNlOjpjcmVhdGVNZXNzYWdlRXZlbnQoKQor
UmVmPE1lc3NhZ2VFdmVudD4gRXZlbnRTb3VyY2U6OmNyZWF0ZU1lc3NhZ2VFdmVudCgpCiB7Ci0g
ICAgUmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZlbnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOwor
ICAgIFJlZjxNZXNzYWdlRXZlbnQ+IGV2ZW50ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoKTsKICAg
ICBldmVudC0+aW5pdE1lc3NhZ2VFdmVudChtX2V2ZW50TmFtZS5pc0VtcHR5KCkgPyBldmVudE5h
bWVzKCkubWVzc2FnZUV2ZW50IDogQXRvbWljU3RyaW5nKG1fZXZlbnROYW1lKSwgZmFsc2UsIGZh
bHNlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShTdHJpbmc6OmFkb3B0KG1fZGF0YSkp
LCBtX2V2ZW50U3RyZWFtT3JpZ2luLCBtX2xhc3RFdmVudElkLCAwLCAwKTsKLSAgICByZXR1cm4g
ZXZlbnQucmVsZWFzZSgpOworICAgIHJldHVybiBldmVudDsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCmluZGV4IGU0OWQ2OGUyMzdmYjk5ZTYx
MGU2ZDZjN2UzNmFjOWQzYTRjMjhjNmMuLjFkMjU0NThlZTNkMGJmYWRiMTIzYjAxYmY2ZjlmZWRl
MDI0M2RlNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKQEAgLTk5LDcgKzk5LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGFib3J0Q29ubmVjdGlvbkF0dGVtcHQoKTsKICAgICB2b2lkIHBh
cnNlRXZlbnRTdHJlYW0oKTsKICAgICB2b2lkIHBhcnNlRXZlbnRTdHJlYW1MaW5lKHVuc2lnbmVk
IHBvcywgaW50IGZpZWxkTGVuZ3RoLCBpbnQgbGluZUxlbmd0aCk7Ci0gICAgUGFzc1JlZlB0cjxN
ZXNzYWdlRXZlbnQ+IGNyZWF0ZU1lc3NhZ2VFdmVudCgpOworICAgIFJlZjxNZXNzYWdlRXZlbnQ+
IGNyZWF0ZU1lc3NhZ2VFdmVudCgpOwogCiAgICAgVVJMIG1fdXJsOwogICAgIGJvb2wgbV93aXRo
Q3JlZGVudGlhbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggMWU3ZmVkNzAxN2Fh
MmI5ZDIwMWNhZDAwMTcxYzkwNjg1YzUzZGM4NC4uMzFhYzMxZTAyZWEyMjU5ZjhlMjg2N2RhN2Nm
NzVkZTdmMTQzZDhlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMzE4NCwxNCAr
MzE4NCwxNCBAQCB2b2lkIEZyYW1lVmlldzo6c2VuZFJlc2l6ZUV2ZW50SWZOZWVkZWQoKQogICAg
IGJvb2wgaXNNYWluRnJhbWUgPSBmcmFtZSgpLmlzTWFpbkZyYW1lKCk7CiAgICAgYm9vbCBjYW5T
ZW5kUmVzaXplRXZlbnRTeW5jaHJvbm91c2x5ID0gaXNNYWluRnJhbWUgJiYgIW1fc2hvdWxkQXV0
b1NpemU7CiAKLSAgICBSZWZQdHI8RXZlbnQ+IHJlc2l6ZUV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkucmVzaXplRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgUmVmPEV2ZW50PiBy
ZXNpemVFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBmYWxz
ZSwgZmFsc2UpOwogICAgIGlmIChjYW5TZW5kUmVzaXplRXZlbnRTeW5jaHJvbm91c2x5KQotICAg
ICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQocmVzaXplRXZlbnQu
cmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2
ZW50KHJlc2l6ZUV2ZW50KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gRklYTUU6IFF1ZXVlaW5n
IHRoaXMgZXZlbnQgZm9yIGFuIHVucHJlZGljdGFibGUgdGltZSBpbiB0aGUgZnV0dXJlIHNlZW1z
CiAgICAgICAgIC8vIGludHJpbnNpY2FsbHkgcmFjeS4gQnkgdGhlIHRpbWUgdGhpcyByZXNpemUg
ZXZlbnQgZmlyZXMsIHRoZSBmcmFtZSBtaWdodAogICAgICAgICAvLyBiZSByZXNpemVkIGFnYWlu
LCBzbyB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0d28gcmVzaXplIGV2ZW50cyBmb3IgdGhlIHNhbWUg
c2l6ZS4KLSAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1ZXVlV2luZG93RXZlbnQocmVz
aXplRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1ZXVl
V2luZG93RXZlbnQoV1RGOjptb3ZlKHJlc2l6ZUV2ZW50KSk7CiAgICAgfQogCiAgICAgaWYgKElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkgJiYgaXNNYWluRnJhbWUpIHsK
QEAgLTMzNzcsMTEgKzMzNzcsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZU92ZXJmbG93U3Rh
dHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmYKICAgICAgICAg
bV9ob3Jpem9udGFsT3ZlcmZsb3cgPSBob3Jpem9udGFsT3ZlcmZsb3c7CiAgICAgICAgIG1fdmVy
dGljYWxPdmVyZmxvdyA9IHZlcnRpY2FsT3ZlcmZsb3c7CiAKLSAgICAgICAgUmVmUHRyPE92ZXJm
bG93RXZlbnQ+IG92ZXJmbG93RXZlbnQgPSBPdmVyZmxvd0V2ZW50OjpjcmVhdGUoaG9yaXpvbnRh
bE92ZXJmbG93Q2hhbmdlZCwgaG9yaXpvbnRhbE92ZXJmbG93LAorICAgICAgICBSZWY8T3ZlcmZs
b3dFdmVudD4gb3ZlcmZsb3dFdmVudCA9IE92ZXJmbG93RXZlbnQ6OmNyZWF0ZShob3Jpem9udGFs
T3ZlcmZsb3dDaGFuZ2VkLCBob3Jpem9udGFsT3ZlcmZsb3csCiAgICAgICAgICAgICB2ZXJ0aWNh
bE92ZXJmbG93Q2hhbmdlZCwgdmVydGljYWxPdmVyZmxvdyk7CiAgICAgICAgIG92ZXJmbG93RXZl
bnQtPnNldFRhcmdldCh2aWV3cG9ydFJlbmRlcmVyLT5lbGVtZW50KCkpOwogCi0gICAgICAgIGZy
YW1lKCkuZG9jdW1lbnQoKS0+ZW5xdWV1ZU92ZXJmbG93RXZlbnQob3ZlcmZsb3dFdmVudC5yZWxl
YXNlKCkpOworICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmVucXVldWVPdmVyZmxvd0V2ZW50
KFdURjo6bW92ZShvdmVyZmxvd0V2ZW50KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA5M2M3MDZjMDcwNDViYjZiYjllNTRjODk1YzY1
ZDAzNjk2MWY1ZGQ2Li5jNjFjYzhiNjdkMzJlYjNmMjQ2Y2JmNWYxMGNhOWM5NzZmZjhkNzIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE2OSw5ICsxNjks
OSBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghaG9yaXpvbnRhbExheW91dE92ZXJmbG93Q2hhbmdl
ZCAmJiAhdmVydGljYWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQpCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgUmVmUHRyPE92ZXJmbG93RXZlbnQ+IG92ZXJmbG93RXZlbnQgPSBPdmVyZmxv
d0V2ZW50OjpjcmVhdGUoaG9yaXpvbnRhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzSG9yaXpv
bnRhbExheW91dE92ZXJmbG93LCB2ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzVmVy
dGljYWxMYXlvdXRPdmVyZmxvdyk7CisgICAgICAgIFJlZjxPdmVyZmxvd0V2ZW50PiBvdmVyZmxv
d0V2ZW50ID0gT3ZlcmZsb3dFdmVudDo6Y3JlYXRlKGhvcml6b250YWxMYXlvdXRPdmVyZmxvd0No
YW5nZWQsIGhhc0hvcml6b250YWxMYXlvdXRPdmVyZmxvdywgdmVydGljYWxMYXlvdXRPdmVyZmxv
d0NoYW5nZWQsIGhhc1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3cpOwogICAgICAgICBvdmVyZmxvd0V2
ZW50LT5zZXRUYXJnZXQobV9ibG9jay0+ZWxlbWVudCgpKTsKLSAgICAgICAgbV9ibG9jay0+ZG9j
dW1lbnQoKS5lbnF1ZXVlT3ZlcmZsb3dFdmVudChvdmVyZmxvd0V2ZW50LnJlbGVhc2UoKSk7Cisg
ICAgICAgIG1fYmxvY2stPmRvY3VtZW50KCkuZW5xdWV1ZU92ZXJmbG93RXZlbnQoV1RGOjptb3Zl
KG92ZXJmbG93RXZlbnQpKTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcAppbmRleCAwNzIxMDc2OWZkMDZiYTljZTg3YWM0NjUy
Yzk5ZTJjMTc4ZDI4NGYxLi43ZWI1OGEyNmE0OGZmNzBlZmY5ZTVmNTUzZDU2ZTQwOGZiMWYyMmM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKQEAgLTQ5
LDggKzQ5LDggQEAgV29ya2VyRXZlbnRRdWV1ZTo6fldvcmtlckV2ZW50UXVldWUoKQogY2xhc3Mg
V29ya2VyRXZlbnRRdWV1ZTo6RXZlbnREaXNwYXRjaGVyCiB7CiBwdWJsaWM6Ci0gICAgRXZlbnRE
aXNwYXRjaGVyKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBXb3JrZXJFdmVudFF1ZXVlJiBldmVu
dFF1ZXVlKQotICAgICAgICA6IG1fZXZlbnQoZXZlbnQpCisgICAgRXZlbnREaXNwYXRjaGVyKFJl
ZlB0cjxFdmVudD4mJiBldmVudCwgV29ya2VyRXZlbnRRdWV1ZSYgZXZlbnRRdWV1ZSkKKyAgICAg
ICAgOiBtX2V2ZW50KFdURjo6bW92ZShldmVudCkpCiAgICAgICAgICwgbV9ldmVudFF1ZXVlKGV2
ZW50UXVldWUpCiAgICAgICAgICwgbV9pc0NhbmNlbGxlZChmYWxzZSkKICAgICB7CkBAIC02Nyw3
ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1faXNDYW5jZWxsZWQpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIG1fZXZlbnRRdWV1ZS5tX2V2ZW50RGlzcGF0Y2hlck1hcC5yZW1v
dmUobV9ldmVudC5nZXQoKSk7Ci0gICAgICAgIG1fZXZlbnQtPnRhcmdldCgpLT5kaXNwYXRjaEV2
ZW50KG1fZXZlbnQpOworICAgICAgICBtX2V2ZW50LT50YXJnZXQoKS0+ZGlzcGF0Y2hFdmVudCgq
bV9ldmVudCk7CiAgICAgICAgIG1fZXZlbnQgPSBudWxscHRyOwogICAgIH0KIApAQCAtODMsMTMg
KzgzLDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQ2FuY2VsbGVkOwogfTsKIAotYm9vbCBX
b3JrZXJFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiti
b29sIFdvcmtlckV2ZW50UXVldWU6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7
CiAgICAgaWYgKG1faXNDbG9zZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEV2ZW50
RGlzcGF0Y2hlciogZXZlbnREaXNwYXRjaGVyUHRyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcihldmVu
dC5nZXQoKSwgKnRoaXMpOwotICAgIG1fZXZlbnREaXNwYXRjaGVyTWFwLmFkZChldmVudCwgZXZl
bnREaXNwYXRjaGVyUHRyKTsKKyAgICBFdmVudERpc3BhdGNoZXIqIGV2ZW50RGlzcGF0Y2hlclB0
ciA9IG5ldyBFdmVudERpc3BhdGNoZXIoZXZlbnQuY29weVJlZigpLCAqdGhpcyk7CisgICAgbV9l
dmVudERpc3BhdGNoZXJNYXAuYWRkKGV2ZW50LnB0cigpLCBldmVudERpc3BhdGNoZXJQdHIpOwog
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5wb3N0VGFzayhbZXZlbnREaXNwYXRjaGVyUHRy
XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEV2
ZW50RGlzcGF0Y2hlcj4gZXZlbnREaXNwYXRjaGVyKGV2ZW50RGlzcGF0Y2hlclB0cik7CiAgICAg
ICAgIGV2ZW50RGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJFdmVudFF1ZXVlLmgKaW5kZXggOWEwNTc1NjgxMTkyOTIzMGI0YmVlNTc4MGRlYzg0MTlk
NTVhMjQ3ZS4uM2RiZjMzZGIzOGI3Yzc5MzMxOGRiYmYxZTQ4NDk0ZjA0MjZlY2I3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgKQEAgLTM5LDcgKzM5LDcgQEAg
cHVibGljOgogICAgIGV4cGxpY2l0IFdvcmtlckV2ZW50UXVldWUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYpOwogICAgIHZpcnR1YWwgfldvcmtlckV2ZW50UXVldWUoKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgY2FuY2VsRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2xv
c2UoKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKaW5kZXggYWIxNzA4ZmU0NDI1ZDAx
ZjY1MTU4MzkzMzU0N2Q5YzljN2RiNmUxZC4uYzNlMTUzOGI0MjZjZTM1NjU4YzA4YjMxMmQ4ZmM5
MTkwNTk5MGE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCkBAIC04MSwyNSArODEsMjQgQEAgdm9p
ZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hUaHJvdHRsZWRQ
cm9ncmVzc0V2ZW50KGJvb2wgbGUKICAgICBtX2hhc1Rocm90dGxlZFByb2dyZXNzRXZlbnQgPSB0
cnVlOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNw
YXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVudChSZWZQdHI8RXZlbnQ+JiYgZXZlbnQsIFByb2dyZXNz
RXZlbnRBY3Rpb24gcHJvZ3Jlc3NFdmVudEFjdGlvbikKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KEV2ZW50JiBl
dmVudCwgUHJvZ3Jlc3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2ZW50QWN0aW9uKQogewogICAgIGlm
IChwcm9ncmVzc0V2ZW50QWN0aW9uID09IEZsdXNoUHJvZ3Jlc3NFdmVudCkKICAgICAgICAgZmx1
c2hQcm9ncmVzc0V2ZW50KCk7CiAKLSAgICBkaXNwYXRjaEV2ZW50KFdURjo6bW92ZShldmVudCkp
OworICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaEV2ZW50KFJlZlB0cjxFdmVudD4mJiBldmVudCkK
K3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQo
RXZlbnQmIGV2ZW50KQogewotICAgIEFTU0VSVChldmVudCk7CiAgICAgaWYgKG1fZGVmZXJFdmVu
dHMpIHsKLSAgICAgICAgaWYgKG1fZGVmZXJyZWRFdmVudHMuc2l6ZSgpID4gMSAmJiBldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5yZWFkeXN0YXRlY2hhbmdlRXZlbnQgJiYgZXZlbnQtPnR5
cGUoKSA9PSBtX2RlZmVycmVkRXZlbnRzLmxhc3QoKS0+dHlwZSgpKSB7CisgICAgICAgIGlmICht
X2RlZmVycmVkRXZlbnRzLnNpemUoKSA+IDEgJiYgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMo
KS5yZWFkeXN0YXRlY2hhbmdlRXZlbnQgJiYgZXZlbnQudHlwZSgpID09IG1fZGVmZXJyZWRFdmVu
dHMubGFzdCgpLT50eXBlKCkpIHsKICAgICAgICAgICAgIC8vIFJlYWR5c3RhdGVjaGFuZ2UgZXZl
bnRzIGFyZSBzdGF0ZS1sZXNzIHNvIGF2b2lkIHJlcGVhdGluZyB0d28gaWRlbnRpY2FsIGV2ZW50
cyBpbiBhIHJvdyBvbiByZXN1bWUuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2ZW50KSk7CisgICAgICAg
IG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKICAgICB9IGVsc2UKLSAgICAgICAgbV90
YXJnZXQtPmRpc3BhdGNoRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CisgICAgICAgIG1fdGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSkKQEAgLTEyMCw4ICsxMTksNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlOjpmbHVzaFByb2dyZXNzRXZlbnQoKQogewogICAgIGlmIChtX2RlZmVyRXZlbnRz
ICYmIG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50KSB7CiAgICAgICAgIC8vIE1vdmUgdGhlIHByb2dy
ZXNzIGV2ZW50IHRvIHRoZSBxdWV1ZSwgdG8gZ2V0IGl0IGluIHRoZSByaWdodCBvcmRlciBvbiBy
ZXN1bWUuCi0gICAgICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKG1fZGVmZXJyZWRQcm9ncmVz
c0V2ZW50KTsKLSAgICAgICAgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBudWxscHRyOworICAg
ICAgICBtX2RlZmVycmVkRXZlbnRzLmFwcGVuZChtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudC5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTQ0LDE2ICsxNDIs
MTUgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hE
ZWZlcnJlZEV2ZW50cygpCiAgICAgLy8gVGFrZSBvdmVyIHRoZSBkZWZlcnJlZCBldmVudHMgYmVm
b3JlIGRpc3BhdGNoaW5nIHRoZW0gd2hpY2ggY2FuIHBvdGVudGlhbGx5IGFkZCBtb3JlLgogICAg
IGF1dG8gZGVmZXJyZWRFdmVudHMgPSBXVEY6Om1vdmUobV9kZWZlcnJlZEV2ZW50cyk7CiAKLSAg
ICBSZWZQdHI8RXZlbnQ+IGRlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IG1fZGVmZXJyZWRQcm9ncmVz
c0V2ZW50OwotICAgIG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50ID0gbnVsbHB0cjsKKyAgICBSZWZQ
dHI8RXZlbnQ+IGRlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IFdURjo6bW92ZShtX2RlZmVycmVkUHJv
Z3Jlc3NFdmVudCk7CiAKICAgICBmb3IgKGF1dG8mIGRlZmVycmVkRXZlbnQgOiBkZWZlcnJlZEV2
ZW50cykKLSAgICAgICAgZGlzcGF0Y2hFdmVudChkZWZlcnJlZEV2ZW50LnJlbGVhc2UoKSk7Cisg
ICAgICAgIGRpc3BhdGNoRXZlbnQoZGVmZXJyZWRFdmVudCk7CiAKICAgICAvLyBUaGUgcHJvZ3Jl
c3MgZXZlbnQgd2lsbCBiZSBpbiB0aGUgbV9kZWZlcnJlZEV2ZW50cyB2ZWN0b3IgaWYgdGhlIGxv
YWQgd2FzIGZpbmlzaGVkIHdoaWxlIHN1c3BlbmRlZC4KICAgICAvLyBJZiBub3QsIGp1c3Qgc2Vu
ZCB0aGUgbW9zdCB1cC10by1kYXRlIHByb2dyZXNzIG9uIHJlc3VtZS4KICAgICBpZiAoZGVmZXJy
ZWRQcm9ncmVzc0V2ZW50KQotICAgICAgICBkaXNwYXRjaEV2ZW50KFdURjo6bW92ZShkZWZlcnJl
ZFByb2dyZXNzRXZlbnQpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudCgqZGVmZXJyZWRQcm9ncmVz
c0V2ZW50KTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6
ZmlyZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudFRocm90dGxlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUuaAppbmRleCAyOWY0ZDY1NWQ4M2QxNmY2MTcwZmQ1NTg3NTZk
NWE3NjE5NTA0ZjAyLi5jMTAwOWU1MGRiOTA4Y2E0MzNjZTQ1ZGY1M2ZlNTA3NGVmYTc3NjA5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
VGhyb3R0bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGUuaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUoKTsKIAogICAgIHZvaWQgZGlzcGF0
Y2hUaHJvdHRsZWRQcm9ncmVzc0V2ZW50KGJvb2wgbGVuZ3RoQ29tcHV0YWJsZSwgdW5zaWduZWQg
bG9uZyBsb25nIGxvYWRlZCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsKTsKLSAgICB2b2lkIGRp
c3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KFJlZlB0cjxFdmVudD4mJiwgUHJvZ3Jlc3NFdmVu
dEFjdGlvbiA9IERvTm90Rmx1c2hQcm9ncmVzc0V2ZW50KTsKKyAgICB2b2lkIGRpc3BhdGNoUmVh
ZHlTdGF0ZUNoYW5nZUV2ZW50KEV2ZW50JiwgUHJvZ3Jlc3NFdmVudEFjdGlvbiA9IERvTm90Rmx1
c2hQcm9ncmVzc0V2ZW50KTsKICAgICB2b2lkIGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmKTsKIAogICAgIHZvaWQgc3VzcGVuZCgpOwpAQCAtNjEsNyArNjEsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpOwogICAgIHZvaWQgZGlzcGF0Y2hEZWZl
cnJlZEV2ZW50cygpOwogICAgIHZvaWQgZmx1c2hQcm9ncmVzc0V2ZW50KCk7Ci0gICAgdm9pZCBk
aXNwYXRjaEV2ZW50KFJlZlB0cjxFdmVudD4mJik7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KEV2
ZW50Jik7CiAKICAgICBib29sIGhhc0V2ZW50VG9EaXNwYXRjaCgpIGNvbnN0OwogCkBAIC03NSw3
ICs3NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fZGVmZXJFdmVudHM7CiAgICAgUmVmUHRy
PEV2ZW50PiBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudDsKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50
Pj4gbV9kZWZlcnJlZEV2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9kZWZlcnJlZEV2
ZW50czsKICAgICBUaW1lciBtX2Rpc3BhdGNoRGVmZXJyZWRFdmVudHNUaW1lcjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265362</attachid>
            <date>2015-11-11 21:49:11 -0800</date>
            <delta_ts>2015-11-11 21:50:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151158-20151111214906.patch</filename>
            <type>text/plain</type>
            <size>123937</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IwZjM1OGI3ODBmMmMy
MDU2NzM0ODA4ZjBiOTExOTE0ODI4Nzk0Ni4uZDMyOTU0NzA1ZjE4NjQ5M2M4ZWI2ZmZjNzk0YTkx
MGEwMjhkMTZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFz
c1JlZlB0ciB0byBkaXNwYXRjaEV2ZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFzc1JlZlB0ciB0byBkaXNwYXRj
aEV2ZW50KCkgYmVjYXVzZToKKyAgICAgICAgMS4gUGFzc1JlZlB0ciBpcyBsZWdhY3kgYW5kIHNo
b3VsZCBubyBsb25nZXIgYmUgdXNlZAorICAgICAgICAyLiBXZSBkb24ndCBhY3R1YWxseSB0cmFu
c2ZlciBvd25lcnNoaXAgb2YgdGhlIEV2ZW50IHRvIHRoZSBjYWxsZWUKKworICAgICAgICBQYXNz
IGEgQysrIHJlZmVyZW5jZSBpbnN0ZWFkLgorCiAyMDE1LTExLTExICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIGhhbmRsZS4qRXZlbnQgdG8gZGlz
cGF0Y2guKkV2ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlDb250cm9sbGVyLmNwcAppbmRleCBjZjgyYTM1NTI5Y2UzMDgwN2QxNjkwNjllNWQ3YWZj
YjhhNDFiZDllLi4yNTIxNWM5NzA0NmNlOWZlMmJmYWIxZTBiNGQwMWQxNGFiMTM1YjhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxl
ci5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6dXBkYXRlQmF0
dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGEKIAogdm9pZCBC
YXR0ZXJ5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQog
ewotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFs
c2UsIGZhbHNlKTsKKyAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5
cGUsIGZhbHNlLCBmYWxzZSk7CiAgICAgUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnkgPSBi
YXR0ZXJ5U3RhdHVzOwogICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycykKICAg
ICAgICAgbGlzdGVuZXItPmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoZXZlbnQsIGJhdHRlcnkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAK
aW5kZXggM2MxZWE3NzQ1NmY0ZDJhOTY3NzdlNDlkYzY1MDExNGEyODY2NWY2Mi4uZDZkMTgwZTg1
NTYwYWNkM2Y3Yzc5Y2I1NTc3NGE4MDQxMDc5YzJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIGRv
dWJsZSBCYXR0ZXJ5TWFuYWdlcjo6bGV2ZWwoKQogICAgIHJldHVybiBtX2JhdHRlcnlTdGF0dXMg
PyBtX2JhdHRlcnlTdGF0dXMtPmxldmVsKCkgOiAxOwogfQogCi12b2lkIEJhdHRlcnlNYW5hZ2Vy
OjpkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVm
UHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMpCit2b2lkIEJhdHRlcnlNYW5hZ2VyOjpk
aWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKEV2ZW50JiBldmVudCwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3Rh
dHVzPiBiYXR0ZXJ5U3RhdHVzKQogewogICAgIHVwZGF0ZUJhdHRlcnlTdGF0dXMoYmF0dGVyeVN0
YXR1cyk7CiAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oCmluZGV4IDc5YTAxZjkzNjliMDYzOTg4ZjZi
YzI3YzY5NjhjNzU1NGU4Y2RkYWYuLmQ0ZTNkMjYxNWUyNjEyMDg0NzA1YWQ2MmI1MWNiNTMyYTA4
YzI5MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5
TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFu
YWdlci5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgZGlzY2hhcmdpbmdU
aW1lKCk7CiAgICAgZG91YmxlIGxldmVsKCk7CiAKLSAgICB2b2lkIGRpZENoYW5nZUJhdHRlcnlT
dGF0dXMoUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworICAg
IHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhFdmVudCYsIFBhc3NSZWZQdHI8QmF0dGVyeVN0
YXR1cz4pOwogICAgIHZvaWQgdXBkYXRlQmF0dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEJhdHRlcnlT
dGF0dXM+KTsKICAgICB2b2lkIGJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCkgeyBtX2JhdHRl
cnlDb250cm9sbGVyID0gbnVsbHB0cjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBiODhlZGU1OGQ4
MWU0MDZjODAyZTUzZThhNDE4NzQ5YmQxMzM3YTk5Li5mODFmMzY1ODJkN2RiZmY1MjVlOGNlODdi
OWYwNTczODI3MWI0ODFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTM2LDMwICszNiwzMCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChF
dmVudCogZXZlbnQsIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYgZXZlbnRUYXJnZXRzKQor
Ym9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50JiBldmVudCwgVmVjdG9yPFJl
ZlB0cjxFdmVudFRhcmdldD4+JiBldmVudFRhcmdldHMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBl
dmVudFRhcmdldHMuc2l6ZSgpOwogICAgIEFTU0VSVChzaXplKTsKIAotICAgIGV2ZW50LT5zZXRF
dmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOworICAgIGV2ZW50LnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7CiAgICAgZm9yIChzaXplX3QgaSA9IHNpemUgLSAx
OyBpOyAtLWkpIHsgLy8gRG9uJ3QgZG8gdGhlIGZpcnN0IGVsZW1lbnQuCi0gICAgICAgIGV2ZW50
LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1tpXS5nZXQoKSk7CisgICAgICAgIGV2ZW50
LnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKICAgICAgICAgZXZlbnRU
YXJnZXRzW2ldLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwotICAgICAgICBpZiAoZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBpZiAoZXZlbnQucHJvcGFnYXRpb25TdG9w
cGVkKCkpCiAgICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKICAgICB9CiAKLSAgICBl
dmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKLSAgICBldmVudC0+c2V0Q3Vy
cmVudFRhcmdldChldmVudFRhcmdldHNbMF0uZ2V0KCkpOworICAgIGV2ZW50LnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChldmVudFRh
cmdldHNbMF0uZ2V0KCkpOwogICAgIGV2ZW50VGFyZ2V0c1swXS0+ZmlyZUV2ZW50TGlzdGVuZXJz
KGV2ZW50KTsKLSAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8ICFldmVudC0+
YnViYmxlcygpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICBpZiAoZXZlbnQucHJvcGFn
YXRpb25TdG9wcGVkKCkgfHwgIWV2ZW50LmJ1YmJsZXMoKSB8fCBldmVudC5jYW5jZWxCdWJibGUo
KSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKLSAgICBldmVudC0+c2V0RXZlbnRQ
aGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkJVQkJMSU5HX1BIQVNFKTsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsr
aSkgeyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgZXZlbnQtPnNldEN1
cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnQuc2V0Q3Vy
cmVudFRhcmdldChldmVudFRhcmdldHNbaV0uZ2V0KCkpOwogICAgICAgICBldmVudFRhcmdldHNb
aV0tPmZpcmVFdmVudExpc3RlbmVycyhldmVudCk7Ci0gICAgICAgIGlmIChldmVudC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQorICAgICAgICBpZiAoZXZl
bnQucHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZlbnQuY2FuY2VsQnViYmxlKCkpCiAgICAgICAg
ICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKICAgICB9CiAKQEAgLTgyLDkgKzgyLDkgQEAgYm9v
bCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50KiBldmVudCwgVmVjdG9yPFJlZlB0
cjxFdmVudFRhcmdldD4+JiBldmUKICAgICAvLyAgICAgICAgZXZlbnQgb24gdGhlIHdpbmRvdyB1
bnRpbCB0aGF0IGhhcyBiZWVuIGltcGxlbWVudGVkKS4iIC0tIEpvbmFzIFNpY2tpbmcKIAogZG9u
ZURpc3BhdGNoaW5nOgotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOwotICAg
IGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOwotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2
ZW50ZWQoKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOworICAgIGV2ZW50
LnNldEV2ZW50UGhhc2UoMCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggYTQ2MzkzZWQ4NmM0
YTYxZTU2OTY0NWM5NmM5MWM1NTA4MjY0ZWZmZi4uZWQ1OTU5NzVhY2I2NWFkNjcyZjUyODk5YWQw
MmYzYWYzZjMzNTAwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgRXZlbnRU
YXJnZXQ7CiAKIGNsYXNzIElEQkV2ZW50RGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IGJvb2wgZGlzcGF0Y2goRXZlbnQqLCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4mKTsgLy8g
VGhlIHRhcmdldCBmaXJzdCBhbmQgdGhlbiBpdHMgYW5jZXN0b3JzIGluIG9yZGVyIG9mIGhvdyB0
aGUgZXZlbnQgYnViYmxlcy4KKyAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaChFdmVudCYsIFZlY3Rv
cjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFuZCB0aGVuIGl0
cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgogCiBwcml2YXRl
OgogICAgIElEQkV2ZW50RGlzcGF0Y2hlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAppbmRleCBk
YmUwMDBmNTcxNGFlMjg4ZjA2MzQ4MjNlYzYzNWZmMTg0NGM4MWIzLi42MWIxNzdjODk4OGZkNzYz
ZmVkODIyNDE4ZDEzMGY2OTk1NDI3OTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtMzMx
LDcgKzMzMSw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQodWlu
dDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKICAgICAKICAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gSURC
VmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUoY3VycmVudFZlcnNpb24sIHJlcXVlc3RlZFZlcnNp
b24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpOwogICAgIGV2ZW50LT5zZXRUYXJn
ZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5x
dWV1ZUV2ZW50KGFkb3B0UmVmKCZldmVudC5sZWFrUmVmKCkpKTsKKyAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7
CiB9CiAKIHZvaWQgSURCRGF0YWJhc2U6OmRpZENyZWF0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRl
eEluZm8mIGluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcAppbmRleCA3NWI5NjVkOTBkMDE5ZTBmNTY4
YzQzYzdmZDhmOTVjMTFjOWVlZWVjLi45OGFlYWQ1ZTlkMTVmYTE2ZmFhNjdhZjhiMTMyNjFmYWNl
MmY5ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKQEAgLTE5NCwxNiArMTk0LDE0IEBAIHZvaWQg
SURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoJmV2ZW50LmdldCgpKTsKKyAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjpt
b3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVu
dCYgZXZlbnQpCiB7Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZl
bnQgLSAlcyIsIHBycEV2ZW50LT50eXBlKCkuY2hhcmFjdGVyczgoKSk7CisgICAgTE9HKEluZGV4
ZWREQiwgIklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQgLSAlcyIsIGV2ZW50LnR5cGUoKS5jaGFy
YWN0ZXJzOCgpKTsKIAotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKLQotICAg
IGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgaWYg
KGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQogICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKIAogICAgIFZlY3RvcjxSZWZQ
dHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOwpAQCAtMjE3LDcgKzIxNSw3IEBAIGJvb2wgSURCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBib29s
IGRvbnRQcmV2ZW50RGVmYXVsdDsKICAgICB7CiAgICAgICAgIFRyYW5zYWN0aW9uQWN0aXZhdG9y
IGFjdGl2YXRvcihtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgZG9udFByZXZlbnREZWZh
dWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7
CisgICAgICAgIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2goZXZlbnQsIHRhcmdldHMpOwogICAgIH0KIAogICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJSZXF1ZXN0SW1wbC5oCmluZGV4IGE0MmIxN2I0NDNjNDFjODNjYThlZjlkNmVkNDAy
MzM4ZjQyNjkyYzguLjI5MGUzOWM1YmQzYzk2YzYxOGM1OThmZjg0MDg0MDA1M2ZjMDNmNDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1
ZXN0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJSZXF1ZXN0SW1wbC5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZD
b3VudGVkPElEQlJlcXVlc3Q+OjpkZXJlZjsKIAogICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxF
dmVudD4mJik7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50
Jikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rp
b24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNw
cAppbmRleCAwZGMxYzRmNThlNDYyMjllYzE3YjUxNWIwMWIzMWQ2MmJlNDZjMDYwLi40YTQ3MTk0
YzM0OTk5MzkwYTdjOTdiYWY0MjNiZTRlN2E5ZDEwZmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25J
bXBsLmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmZpcmVPbkFi
b3J0KCkKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJvcnRF
dmVudCwgdHJ1ZSwgZmFsc2UpKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2
ZW50KFJlZjxFdmVudD4gZXZlbnQpCit2b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQo
UmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIEFTU0VSVChtX3N0YXRlICE9IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQpOwogCkBAIC0zNTQsMjIgKzM1NCwyMiBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiBldmVudCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoJmV2ZW50LmdldCgpKTsKKyAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RG
Ojptb3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2
ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmRpc3BhdGNoRXZlbnQiKTsKIAogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09
IHRoaXMpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRl
RXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKIAogICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOwogICAgIHRhcmdldHMuYXBwZW5k
KHRoaXMpOwogICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOwogCi0gICAgcmV0dXJuIElEQkV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAgIHJldHVybiBJ
REJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LCB0YXJnZXRzKTsKIH0KIAogUmVmPElE
Qk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IGIzZDdi
M2NjMzY2ZDU4YWE3YTQ0YTE4ZDMyYTc3NjlkYjZlN2Q1MWMuLjA0MzYxOTU5MGMyNjcxNDFhMDc3
MzVkNWMxZDdiMTkxMDI3NjkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTcxLDcg
KzcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJy
aWRlIGZpbmFsIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgp
IG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYoKTsgfQogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNw
YXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVu
dCYpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBhY3RpdmVET01P
YmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCBib29sIGNhblN1
c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKQEAgLTEyOCw3ICsxMjgs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaXJlT25Db21wbGV0ZSgpOwogICAgIHZvaWQgZmly
ZU9uQWJvcnQoKTsKLSAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+KTsKKyAgICB2b2lk
IGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOwogCiAgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVl
c3RJbmRleFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJbmRleGVk
REI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0
YWJhc2UuY3BwCmluZGV4IGIwMTRlNjYyMWQyMGQxMTNjMWM3MTRjMzFhNzFkOTZmODMxZjg0MmQu
LmQwM2YxMjhjZDMxMWVkMjI5YmRjMzRjN2MwMWU1Y2UwZTExYjY3Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFi
YXNlLmNwcApAQCAtOTIsNyArOTIsNyBAQCBMZWdhY3lEYXRhYmFzZTo6fkxlZ2FjeURhdGFiYXNl
KCkKICAgICAgICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9u
dGVuZCBjb25uZWN0aW9uIGlzIGJlaW5nCiAgICAgICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBj
b3VsZCBmaXJlLgogICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykK
LSAgICAgICAgICAgIGNvbnRleHQtPmV2ZW50UXVldWUoKS5jYW5jZWxFdmVudCgqZXZlbnQpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXZlbnRRdWV1ZSgpLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAg
ICB9CiB9CiAKQEAgLTMyMSw3ICszMjEsNyBAQCB2b2lkIExlZ2FjeURhdGFiYXNlOjpjbG9zZUNv
bm5lY3Rpb24oKQogICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZlcnNpb24sIGJ1dCB0aGUg
ZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZwogICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBj
b3VsZCBmaXJlLgogICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7Ci0g
ICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKKyAg
ICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudChldmVudCk7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAgICAgfQogCkBAIC0zNDEsMjUg
KzM0MSwyNSBAQCB2b2lkIExlZ2FjeURhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UodWludDY0X3Qg
b2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKICAgICBlbnF1ZXVlRXZlbnQoTGVnYWN5
VmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgZXZlbnRO
YW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCkpOwogfQogCi12b2lkIExlZ2FjeURhdGFiYXNlOjpl
bnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIExlZ2FjeURhdGFiYXNl
OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIEFTU0VSVCghbV9jb250
ZXh0U3RvcHBlZCk7CiAgICAgQVNTRVJUKCFtX2lzQ2xvc2VkKTsKICAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5n
ZXQoKSk7Ci0gICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5jb3B5UmVm
KCkpOworICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkpOwogfQog
Ci1ib29sIExlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQorYm9vbCBMZWdhY3lEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudCIpOwot
ICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZl
bnQpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFu
Z2VFdmVudCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2
ZW50LmdldCgpKQorICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5wdHIoKSA9PSAmZXZl
bnQpCiAgICAgICAgICAgICBtX2VucXVldWVkRXZlbnRzLnJlbW92ZShpKTsKICAgICB9Ci0gICAg
cmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKKyAgICByZXR1
cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiBpbnQ2NF90IExlZ2Fj
eURhdGFiYXNlOjpmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5
RGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdh
Y3lEYXRhYmFzZS5oCmluZGV4IDExMzdlNWUzMDAyNDQxODFlMjE4ZTQ5ZjNkNTdiYjdjZDU4ZTY3
N2QuLmVhMWViNWYyM2RhMGY1NjZkOTYzMzY4YTY4YmMzMWFmNDRmZGIyNjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRh
YmFzZS5oCkBAIC04NCwxMCArODQsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNDbG9zZVBlbmRp
bmcoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlUGVuZGluZzsgfQogICAgIHZvaWQgZm9yY2VDbG9z
ZSgpOwogICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX21ldGFkYXRhOyB9Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAKICAgICB1c2luZyBF
dmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIGludDY0X3QgZmluZE9iamVjdFN0b3JlSWQo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAK
ICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9uY2hhbmdlIGV2ZW50cyB3YWl0aW5nIHRv
IGJlIGZpcmVkIG9uIHRoaXMKICAgICAvLyBkYXRhYmFzZSBzbyB0aGF0IHdlIGNhbiBjYW5jZWwg
dGhlbSBpZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBt
X2VucXVldWVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX2VucXVldWVkRXZlbnRz
OwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcAppbmRleCAzMjkwYzUwZjA0MmU5MGVm
MmVhYmE3Mjc1ODBlNzIzOTM0ODI2NTZkLi43MjE3YmMzZTRkYTcyYmM2YjRjNzZlZWQ5NWFmNzcx
NWM0NjFhZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwCkBAIC0xMzgsMTEgKzEz
OCwxMSBAQCBib29sIExlZ2FjeU9wZW5EQlJlcXVlc3Q6OnNob3VsZEVucXVldWVFdmVudCgpIGNv
bnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5T3BlbkRCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgTGVnYWN5T3BlbkRCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgLy8gSWYgdGhlIGNvbm5l
Y3Rpb24gY2xvc2VkIGJldHdlZW4gb25VcGdyYWRlTmVlZGVkIGFuZCB0aGUgZGVsaXZlcnkgb2Yg
dGhlICJzdWNjZXNzIiBldmVudCwKICAgICAvLyBhbiAiZXJyb3IiIGV2ZW50IHNob3VsZCBiZSBm
aXJlZCBpbnN0ZWFkLgotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQgJiYgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkRhdGFiYXNl
ICYmIG1fcmVzdWx0LT5sZWdhY3lEYXRhYmFzZSgpLT5pc0Nsb3NlUGVuZGluZygpKSB7CisgICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50ICYmIG1fcmVzdWx0
LT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSAmJiBtX3Jlc3VsdC0+bGVnYWN5
RGF0YWJhc2UoKS0+aXNDbG9zZVBlbmRpbmcoKSkgewogICAgICAgICBtX3Jlc3VsdCA9IG51bGxw
dHI7CiAgICAgICAgIG9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4iKSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCmluZGV4IDVhNTkz
YjVmNmVhYzcwZGI3ZDMwMmIwNmU4OWNlYmUzODQ4ZGU0NWYuLjY0ZjY2YzQwYjA3ODMzNTY3MWEz
YWI4ZGI4YjlkZTdiZGNhY2JhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaApAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgRXZl
bnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSBm
aW5hbDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikg
b3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBv
dmVycmlkZSBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbnF1
ZXVlRXZlbnQoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcAppbmRleCBhM2MyMDIw
YjAwMGI3MzRlZDZjYTdhMzNlZTM5NmVkODhhOGVlNTFjLi4yYzc0N2E1NmFhYWQ1M2NmN2Q0ZDNh
M2RkMDg0ZjhkNWYzMmE5YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCkBAIC0xNjYsNyArMTY2LDcg
QEAgdm9pZCBMZWdhY3lSZXF1ZXN0OjphYm9ydCgpCiAKICAgICBFdmVudFF1ZXVlJiBldmVudFF1
ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CiAgICAgZm9yIChh
dXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKLSAgICAgICAgYm9vbCByZW1vdmVkID0g
ZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOworICAgICAgICBib29sIHJlbW92ZWQgPSBl
dmVudFF1ZXVlLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1v
dmVkLCByZW1vdmVkKTsKICAgICB9CiAgICAgbV9lbnF1ZXVlZEV2ZW50cy5jbGVhcigpOwpAQCAt
MjYyLDcgKzI2Miw3IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6b25FcnJvcihQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yKQogICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPEV2ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQorc3RhdGljIFJlZjxFdmVudD4gY3JlYXRl
U3VjY2Vzc0V2ZW50KCkKIHsKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
c3VjY2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2UpOwogfQpAQCAtNDY2LDcgKzQ2Niw3IEBAIEV2ZW50
VGFyZ2V0SW50ZXJmYWNlIExlZ2FjeVJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3QKICAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAot
Ym9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQorYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQiKTsKICAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nKTsKQEAg
LTQ3NCwxNiArNDc0LDE2IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZpdHkpOwog
ICAgIEFTU0VSVChtX2VucXVldWVkRXZlbnRzLnNpemUoKSk7CiAgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsK
LSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVhZHlTdGF0ZSA8IElEQlJlcXVlc3RSZWFkeVN0
YXRlOjpEb25lLCAiV2hlbiBkaXNwYXRjaGluZyBldmVudCAlcywgbV9yZWFkeVN0YXRlIDwgRE9O
RSglZCksIHdhcyAlZCIsIGV2ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSksIHN0YXRpY19jYXN0PGlu
dD4obV9yZWFkeVN0YXRlKSk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZWFkeVN0YXRlIDwgSURCUmVxdWVzdFJlYWR5U3Rh
dGU6OkRvbmUsICJXaGVuIGRpc3BhdGNoaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgPCBET05F
KCVkKSwgd2FzICVkIiwgZXZlbnQudHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRp
Y19jYXN0PGludD4oSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpLCBzdGF0aWNfY2FzdDxpbnQ+
KG1fcmVhZHlTdGF0ZSkpOwogCiAgICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3Jl
cXVlc3RTdGF0ZSk7CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxv
Y2tlZEV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRF
dmVudCkKICAgICAgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0
KCkpCisgICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLnB0cigpID09ICZldmVudCkKICAg
ICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwogICAgIH0KIApAQCAtNTAwLDcg
KzUwMCw3IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKIAogICAgIC8vIEN1cnNvciBwcm9wZXJ0aWVzIHNob3VsZCBub3QgdXBkYXRl
ZCB1bnRpbCB0aGUgc3VjY2VzcyBldmVudCBpcyBiZWluZyBkaXNwYXRjaGVkLgogICAgIFJlZlB0
cjxMZWdhY3lDdXJzb3I+IGN1cnNvclRvTm90aWZ5OwotICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpIHsKICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBnZXRS
ZXN1bHRDdXJzb3IoKTsKICAgICAgICAgaWYgKGN1cnNvclRvTm90aWZ5KSB7CiAgICAgICAgICAg
ICBjdXJzb3JUb05vdGlmeS0+c2V0VmFsdWVSZWFkeShyZXF1ZXN0U3RhdGUoKSwgbV9jdXJzb3JL
ZXkucmVsZWFzZSgpLCBtX2N1cnNvclByaW1hcnlLZXkucmVsZWFzZSgpLCBtX2N1cnNvclZhbHVl
KTsKQEAgLTUwOCwxOSArNTA4LDE5IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpIHsKKyAgICBp
ZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpIHsKICAg
ICAgICAgQVNTRVJUKCFtX2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQpOwogICAgICAgICBtX2Rp
ZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQgPSB0cnVlOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBX
aGVuIHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5
IG5lZWQgdG8gY2hhbmdlLgotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmVycm9yRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2
ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCwg
ImV2ZW50IHR5cGUgd2FzICVzIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICBjb25zdCBib29sIHNldFRyYW5zYWN0aW9uQWN0aXZlID0gbV90cmFuc2FjdGlvbiAm
JiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCB8fCAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBtX2Vycm9yQ29kZSAhPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxv
Y2tlZEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2
ZW50LCAiZXZlbnQgdHlwZSB3YXMgJXMiLCBldmVudC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgY29uc3QgYm9vbCBzZXRUcmFuc2FjdGlvbkFjdGl2ZSA9IG1fdHJhbnNhY3Rp
b24gJiYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50IHx8IChldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgbV9lcnJvckNvZGUgIT0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIAogICAgIGlmIChzZXRUcmFuc2FjdGlvbkFjdGl2
ZSkKICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0QWN0aXZlKHRydWUpOwogCi0gICAgYm9vbCBk
b250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50Lmdl
dCgpLCB0YXJnZXRzKTsKKyAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogCiAgICAgaWYgKG1fdHJhbnNhY3Rp
b24pIHsKICAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6
RG9uZSkKQEAgLTUyOCw3ICs1MjgsNyBAQCBib29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAgICAgLy8gUG9zc2libHkgYWJvcnQg
dGhlIHRyYW5zYWN0aW9uLiBUaGlzIG11c3Qgb2NjdXIgYWZ0ZXIgdW5yZWdpc3RlcmluZyAoc28g
dGhpcyByZXF1ZXN0CiAgICAgICAgIC8vIGRvZXNuJ3QgcmVjZWl2ZSBhIHNlY29uZCBlcnJvcikg
YW5kIGJlZm9yZSBkZWFjdGl2YXRpbmcgKHdoaWNoIG1pZ2h0IHRyaWdnZXIgY29tbWl0KS4KLSAg
ICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9u
dFByZXZlbnREZWZhdWx0ICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7CisgICAgICAgIGlmIChldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9udFByZXZlbnREZWZhdWx0
ICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRF
cnJvcihtX2Vycm9yLCBtX2Vycm9yTWVzc2FnZSk7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9u
LT5hYm9ydChJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgfQpAQCAtNTQxLDcgKzU0MSw3IEBA
IGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpCiAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5wb3N0
U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOwogCi0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJREJS
ZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSAmJiAoIWN1cnNvclRvTm90aWZ5IHx8IG1fY3Vyc29yRmlu
aXNoZWQpICYmIGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVu
dCkKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lICYm
ICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JGaW5pc2hlZCkgJiYgZXZlbnQudHlwZSgpICE9
IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpCiAgICAgICAgIG1faGFzUGVuZGluZ0Fj
dGl2aXR5ID0gZmFsc2U7CiAKICAgICByZXR1cm4gZG9udFByZXZlbnREZWZhdWx0OwpAQCAtNTY1
LDcgKzU2NSw3IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6dHJhbnNhY3Rpb25EaWRGaW5pc2hBbmRE
aXNwYXRjaCgpCiAgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRp
bmc7CiB9CiAKLXZvaWQgTGVnYWN5UmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQordm9pZCBMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYm
IGV2ZW50KQogewogICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3Rh
dGU6OlBlbmRpbmcgfHwgbV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25l
KTsKIApAQCAtNTc2LDggKzU3Niw4IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6ZW5xdWV1ZUV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsK
IAotICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVl
RXZlbnQoZXZlbnQuZ2V0KCkpKQotICAgICAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVuZChldmVu
dCk7CisgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVl
dWVFdmVudChldmVudC5jb3B5UmVmKCkpKQorICAgICAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVu
ZChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVl
c3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1
ZXN0LmgKaW5kZXggNWFlZmIxMWQyMjgyYzc3ODFmYTZmOWQ2ODY3ZTY4ODU2ZjU3OTgzMS4uZWIx
ZmJhZWYyYWU2MjY1ZTMyMTdiYmFjZTVmMWMwN2U1ZmQxYmNiYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oCkBA
IC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRp
b25JbkV2ZW50SGFuZGxlcigpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdXNpbmcgRXZlbnRUYXJn
ZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2
ZW50Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHRyYW5zYWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0
Y2goKTsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIExl
Z2FjeVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIExlZ2FjeVRyYW5zYWN0aW9u
Kik7Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQg
ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAgICAgdmlydHVhbCBib29sIHNob3VsZEVucXVl
dWVFdmVudCgpIGNvbnN0OwogICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKICAgICB2b2lkIG9uU3VjY2Vzc0ludGVybmFsKGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CkBAIC0xMzksNyArMTM5LDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7CiAKICAg
ICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5OwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBt
X2VucXVldWVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX2VucXVldWVkRXZlbnRz
OwogCiAgICAgLy8gT25seSB1c2VkIGlmIHRoZSByZXN1bHQgdHlwZSB3aWxsIGJlIGEgY3Vyc29y
LgogICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5z
YWN0aW9uLmNwcAppbmRleCBmMGIzNGEwZGU4MjY1ODg4YzBhNGQzOGE2MWFlZTE5ZGI2NGNiN2Ix
Li5jZTg0OWZkM2Y3NjRhNDVmZTgwMWNhZGUyMTA2ZGVkMDE1ZTNiNGViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lU
cmFuc2FjdGlvbi5jcHAKQEAgLTMwNiwxMyArMzA2LDEzIEBAIGJvb2wgTGVnYWN5VHJhbnNhY3Rp
b246Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faGFzUGVuZGluZ0Fj
dGl2aXR5ICYmICFtX2NvbnRleHRTdG9wcGVkOwogfQogCi1ib29sIExlZ2FjeVRyYW5zYWN0aW9u
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBMZWdhY3lUcmFu
c2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOwogICAgIEFTU0VSVChtX3N0
YXRlICE9IEZpbmlzaGVkKTsKICAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZpdHkpOwogICAg
IEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFTU0VSVChldmVudC0+dGFy
Z2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOwogICAg
IG1fc3RhdGUgPSBGaW5pc2hlZDsKIAogICAgIC8vIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCkBA
IC0zMjgsOCArMzI4LDggQEAgYm9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICB0YXJnZXRzLmFwcGVuZChkYigpKTsKIAogICAg
IC8vIEZJWE1FOiBXaGVuIHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3
aWxsIHByb2JhYmx5IG5lZWQgdG8gY2hhbmdlLgotICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmFib3J0RXZlbnQpOwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBJREJFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKyAgICBBU1NFUlQoZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgYm9vbCByZXR1cm5WYWx1ZSA9IElEQkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogICAgIC8vIEZJWE1FOiBUcnkgdG8g
Y29uc3RydWN0IGEgdGVzdCB3aGVyZSB8dGhpc3wgb3V0bGl2ZXMgb3BlbkRCUmVxdWVzdCBhbmQg
d2UKICAgICAvLyBnZXQgYSBjcmFzaC4KICAgICBpZiAobV9vcGVuREJSZXF1ZXN0KSB7CkBAIC0z
NTksMTQgKzM1OSwxNCBAQCBjb25zdCBjaGFyKiBMZWdhY3lUcmFuc2FjdGlvbjo6YWN0aXZlRE9N
T2JqZWN0TmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuICJMZWdhY3lUcmFuc2FjdGlvbiI7CiB9CiAK
LXZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYg
ZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3N0YXRlICE9IEZpbmlzaGVkLCAi
QSBmaW5pc2hlZCB0cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9mIHR5cGUg
JXMuIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9j
b250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudCk7CisgICAgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVu
dCkpOwogfQogCiBJREJEYXRhYmFzZUJhY2tlbmQqIExlZ2FjeVRyYW5zYWN0aW9uOjpiYWNrZW5k
REIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaAppbmRleCA4M2I3OTcxMTVlNzliN2VmMWJj
Y2M1YWE0MDM3MGUyMzc1YWU5NDIyLi5mNzlkZWMzMzM5NWRhMmE1YmQ2NjMzYTYyM2M4M2EzZjk3
MDc1NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5VHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYp
IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVhbCBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwpAQCAtMTA0LDcg
KzEwNCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTGVnYWN5VHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGludDY0X3QsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUsIExlZ2FjeURhdGFiYXNlKiwgTGVnYWN5T3BlbkRCUmVxdWVz
dCosIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKTsKIAotICAgIHZvaWQgZW5xdWV1ZUV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYp
OwogICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOwogCiAgICAgdm9pZCByZWdpc3Rlck9wZW5D
dXJzb3IoTGVnYWN5Q3Vyc29yKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCmluZGV4IGMzY2MzODFhODhhMDJhODgyNzFmZGI3ZDQy
NTUxYTAzZWRjNTE3OGIuLjA0NDM0MGY3YTk4Yjg4ZmNlZTE2NzVkYTE5YTIxNGZkZjQ1NDQ5NzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCkBAIC0yOTksMTMgKzI5OSwxMSBAQCB2b2lkIE1lZGlhU3RyZWFtOjpzY2hlZHVsZUFj
dGl2ZVN0YXRlQ2hhbmdlKCkKIAogdm9pZCBNZWRpYVN0cmVhbTo6YWN0aXZpdHlFdmVudFRpbWVy
RmlyZWQoKQogewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CisgICAgVmVjdG9y
PFJlZjxFdmVudD4+IGV2ZW50czsKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEFjdGl2aXR5
RXZlbnRzKTsKIAogICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHMpCi0gICAgICAgIGRpc3Bh
dGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKLQotICAgIGV2ZW50cy5jbGVhcigpOworICAgICAg
ICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogVVJMUmVnaXN0cnkmIE1lZGlhU3RyZWFtOjpy
ZWdpc3RyeSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtLmgKaW5kZXggMzFhNDYxODRmMzIwMTdjMTBlMjc1ZTEwODhlYmNhMmQ5YTli
ZDU4ZC4uMWE0NTY0NzZiOGVjMzc2OTc2NmNmZmQwZTRmMmJhNWVjZGFiNWFhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaApAQCAtMTI4
LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0
cmVhbVRyYWNrPj4gbV90cmFja1NldDsKIAogICAgIFRpbWVyIG1fYWN0aXZpdHlFdmVudFRpbWVy
OwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEFjdGl2aXR5RXZlbnRzOwor
ICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX3NjaGVkdWxlZEFjdGl2aXR5RXZlbnRzOwogCiAgICAg
VmVjdG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAKaW5kZXggNTI3YjVkMTlk
OTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4YmNkNWQ5OS4uYzllMmNjYWM1YzFhNjM3Y2FlMjUyZWFh
ZTM5ZTE4ZWRhYWJkNGUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC0xNDUsOSArMTQ1LDkgQEAgYm9vbCBSVENE
VE1GU2VuZGVyOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgUlRDRFRNRlNlbmRlcjo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBSVENEVE1GU2VuZGVyOjpzY2hlZHVsZURpc3BhdGNo
RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewotICAgIG1fc2NoZWR1bGVkRXZlbnRzLmFwcGVu
ZChldmVudCk7CisgICAgbV9zY2hlZHVsZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkp
OwogCiAgICAgaWYgKCFtX3NjaGVkdWxlZEV2ZW50VGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV9zY2hlZHVsZWRFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKQEAgLTE1OCwxMSArMTU4LDEx
IEBAIHZvaWQgUlRDRFRNRlNlbmRlcjo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKCkKICAgICBp
ZiAobV9zdG9wcGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50
Pj4gZXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBldmVudHM7CiAgICAgZXZlbnRzLnN3
YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCiAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykK
LSAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaAppbmRleCAwMjNl
ODI3OTdiNjM0NTBkYWZjMzQ0YzgyNmE2NzNkOTNjM2NmZDNjLi5hYTVkZGE5MWJiOGY0OTQ1NmZh
N2RlOGJmZTRmZmFmYTZmMDM1NjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgog
ICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKICAg
ICBib29sIGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZv
aWQgc2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIHNj
aGVkdWxlRGlzcGF0Y2hFdmVudChSZWY8RXZlbnQ+JiYpOwogICAgIHZvaWQgc2NoZWR1bGVkRXZl
bnRUaW1lckZpcmVkKCk7CiAKICAgICAvLyBFdmVudFRhcmdldApAQCAtOTAsNyArOTAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zdG9wcGVkOwogCiAgICAgVGltZXIgbV9zY2hlZHVsZWRFdmVu
dFRpbWVyOwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKKyAg
ICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9zY2hlZHVsZWRFdmVudHM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0RhdGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDRGF0YUNoYW5uZWwuY3BwCmluZGV4IGQ3NzA4Y2EwNWJlYWQxNDE2NzdmYzg0NWE5YzMz
NzZlNjQ0ZmQzMTQuLjU1ZjUwODYxNjg2YzFkNmVhYmQyMDUzNDBlZDM4MzVhNjgyNWE0MjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5u
ZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCkBAIC0zMDQsOSArMzA0LDkgQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c3RvcCgp
CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBSVENE
YXRhQ2hhbm5lbDo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQordm9pZCBSVENEYXRhQ2hhbm5lbDo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFJlZjxFdmVudD4m
JiBldmVudCkKIHsKLSAgICBtX3NjaGVkdWxlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIG1f
c2NoZWR1bGVkRXZlbnRzLmFwcGVuZChXVEY6Om1vdmUoZXZlbnQpKTsKIAogICAgIGlmICghbV9z
Y2hlZHVsZWRFdmVudFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc2NoZWR1bGVkRXZlbnRU
aW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC0zMTcsMTEgKzMxNywxMSBAQCB2b2lkIFJUQ0RhdGFD
aGFubmVsOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAgIGlmIChtX3N0b3BwZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CisgICAg
VmVjdG9yPFJlZjxFdmVudD4+IGV2ZW50czsKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEV2
ZW50cyk7CiAKICAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmgKaW5kZXggODhlNzRhZTllZjIyODIyNTRh
MWFjNmJmNTNmYTRkNzU1NTQ0ZWU3NS4uOWIzYzY0ZGIzZjg5MDc2MTJkMTFjMmNiN2MzYWI5M2M0
Yzg2ZmM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENEYXRhQ2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDRGF0YUNoYW5uZWwuaApAQCAtMTEwLDcgKzExMCw3IEBAIHByaXZhdGU6CiAgICAgQmluYXJ5
VHlwZSBtX2JpbmFyeVR5cGU7CiAKICAgICBUaW1lciBtX3NjaGVkdWxlZEV2ZW50VGltZXI7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fc2NoZWR1bGVkRXZlbnRzOworICAgIFZlY3RvcjxS
ZWY8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggZGQ0NjQxZTFiOGRhMzJkYTcxNGYzNDY4MTMzOTY3YzU4
MWE0M2U2NS4uYzZhZjEyYmRmNGUzM2NjMDM0YjM3Njg5OTNjNDBlN2NmYWU1YjEyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi5jcHAKQEAgLTcyNSw5ICs3MjUsOSBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpj
aGFuZ2VJY2VDb25uZWN0aW9uU3RhdGUoSWNlQ29ubmVjdGlvblN0YXRlIGljZUNvbm5lY3Rpbwog
ICAgIH0KIH0KIAotdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6c2NoZWR1
bGVEaXNwYXRjaEV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKLSAgICBtX3NjaGVkdWxlZEV2
ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIG1fc2NoZWR1bGVkRXZlbnRzLmFwcGVuZChXVEY6Om1v
dmUoZXZlbnQpKTsKIAogICAgIGlmICghbV9zY2hlZHVsZWRFdmVudFRpbWVyLmlzQWN0aXZlKCkp
CiAgICAgICAgIG1fc2NoZWR1bGVkRXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC03Mzgs
MTEgKzczOCwxMSBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpzY2hlZHVsZWRFdmVudFRpbWVy
RmlyZWQoKQogICAgIGlmIChtX3N0b3BwZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3Rv
cjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IGV2ZW50czsK
ICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEV2ZW50cyk7CiAKICAgICBmb3IgKGF1dG8mIGV2
ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7Cisg
ICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogCiAgICAgZXZlbnRzLmNsZWFyKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLmgKaW5kZXggNTJkYzc5MzBiMDQyNjIwMTAxYWRmNmQyZjY0M2RmY2E1ZTg1ZTBmMC4u
ODIzYmJmMjIyYjE1YjRlZjM5ZGZiMjQ0OGQ1YzdlODU1MDU3NzUwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaApA
QCAtMTI3LDcgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgUlRDUGVlckNvbm5lY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFBhc3NSZWZQdHI8UlRDQ29uZmlndXJhdGlvbj4sIEV4Y2VwdGlv
bkNvZGUmKTsKIAogICAgIHN0YXRpYyBSZWZQdHI8UlRDQ29uZmlndXJhdGlvbj4gcGFyc2VDb25m
aWd1cmF0aW9uKGNvbnN0IERpY3Rpb25hcnkmIGNvbmZpZ3VyYXRpb24sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Cisg
ICAgdm9pZCBzY2hlZHVsZURpc3BhdGNoRXZlbnQoUmVmPEV2ZW50PiYmKTsKICAgICB2b2lkIHNj
aGVkdWxlZEV2ZW50VGltZXJGaXJlZCgpOwogICAgIGJvb2wgaGFzTG9jYWxTdHJlYW1XaXRoVHJh
Y2tJZChjb25zdCBTdHJpbmcmIHRyYWNrSWQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KaW5k
ZXggZTQ1MzJjOGExNWZkNTYyOWQyYTE4NTg4Zjk3YjE1NGEyMDhmMGRiYy4uNmM4M2VkY2VhNTA4
ZTMzYjZmNjQ3NjNhNzg5ZWE3NTMyYTQxNGQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQpA
QCAtMjQzLDggKzI0Myw4IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6bW92aWVTaXplKCkgY29uc3QKIHZvaWQgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQ6OnBvc3RFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBSZWY8SFRNTFBs
dWdJbkVsZW1lbnQ+IHByb3RlY3QoKm1fcGFyZW50RWxlbWVudCk7Ci0gICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgbV9w
YXJlbnRFbGVtZW50LT5kaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKKyAgICBSZWY8RXZlbnQ+
IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVlKTsKKyAgICBtX3Bh
cmVudEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiAjaWYgUExBVEZPUk0oSU9T
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJv
eGltaXR5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9E
ZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmNwcAppbmRleCA2MDc4ZjM3ZmI4ZDNiOTFlNGVhNzZi
NDBmM2IyNDBjYjAyZGUxM2ZiLi42OGVhMjk2YWY4M2E1MWMzZGU2MThjOTk2ZWQ0MTE2NDZiMThj
OTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9EZXZpY2VQ
cm94aW1pdHlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hp
bWl0eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmNwcApAQCAtNTcsNyArNTcsNyBAQCBib29s
IERldmljZVByb3hpbWl0eUNvbnRyb2xsZXI6Omhhc0xhc3REYXRhKCkKICAgICByZXR1cm4gZGV2
aWNlUHJveGltaXR5Q2xpZW50KCktPmhhc0xhc3REYXRhKCk7CiB9CiAKLVBhc3NSZWZQdHI8RXZl
bnQ+IERldmljZVByb3hpbWl0eUNvbnRyb2xsZXI6OmdldExhc3RFdmVudCgpCitSZWZQdHI8RXZl
bnQ+IERldmljZVByb3hpbWl0eUNvbnRyb2xsZXI6OmdldExhc3RFdmVudCgpCiB7CiAgICAgcmV0
dXJuIERldmljZVByb3hpbWl0eUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdGRldmlj
ZXByb3hpbWl0eUV2ZW50LCBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+dmFsdWUoKSwgZGV2aWNl
UHJveGltaXR5Q2xpZW50KCktPm1pbigpLCBkZXZpY2VQcm94aW1pdHlDbGllbnQoKS0+bWF4KCkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNl
UHJveGltaXR5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkv
RGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5oCmluZGV4IDQwZGRmYjdmMjEwY2ZhMDQxZDVkNmZk
ZGE2MGQyZjBiYTI1NWFiMDYuLjg5Y2YwNTQ5YTY0M2QzOTZhYTMwNDNmNWQzZmE5NjI5ZTFkOTRj
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVBy
b3hpbWl0eUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0
eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmgKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgog
ICAgIERldmljZVByb3hpbWl0eUNsaWVudCogZGV2aWNlUHJveGltaXR5Q2xpZW50KCk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzTGFzdERhdGEoKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RXZl
bnQ+IGdldExhc3RFdmVudCgpOworICAgIHZpcnR1YWwgUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZl
bnQoKTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogICAgIHN0
YXRpYyBEZXZpY2VQcm94aW1pdHlDb250cm9sbGVyKiBmcm9tKFBhZ2UqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKaW5kZXggNjQ2NTg0MDAy
MGVhNjUzOWQ4MGY0YjQzYzE3YTU0MmQ4ZDNiNzI3MS4uNDFlYjEwOWU3YmViZDhiZWYxYjk2ZTg2
NDUyNjI1NTYzOTI1MWRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5jcHAKQEAgLTY0OCw3ICs2NDgsNyBAQCB2b2lkIFdlYlNvY2tldDo6ZGlz
cGF0Y2hPclF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogICAgIGlmIChtX3Nob3VsZERl
bGF5RXZlbnRGaXJpbmcpCiAgICAgICAgIG1fcGVuZGluZ0V2ZW50cy5hcHBlbmQoV1RGOjptb3Zl
KGV2ZW50KSk7CiAgICAgZWxzZQotICAgICAgICBkaXNwYXRjaEV2ZW50KFdURjo6bW92ZShldmVu
dCkpOworICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogfSAgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmNwcAppbmRleCBkZGUxMzNjYzdjNzAxNDRl
MmQxMDM0NGZhNzcyMzNjOTFmMDY1ZmQ0Li5jOTA3NDYwNWEzZTYwOTU4MGY5OTJhYTYxZjdkNWUz
ZjA1OGRiNTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCkBAIC0xNjYsOSArMTY2LDkg
QEAgYm9vbCBGb250TG9hZGVyOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKICAgICBy
ZXR1cm4gIW1fbnVtTG9hZGluZ0Zyb21DU1MgJiYgIW1fbnVtTG9hZGluZ0Zyb21KUzsKIH0KIAot
dm9pZCBGb250TG9hZGVyOjpzY2hlZHVsZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQor
dm9pZCBGb250TG9hZGVyOjpzY2hlZHVsZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKLSAg
ICBtX3BlbmRpbmdFdmVudHMuYXBwZW5kKGV2ZW50KTsKKyAgICBtX3BlbmRpbmdFdmVudHMuYXBw
ZW5kKFdURjo6bW92ZShldmVudCkpOwogICAgIGlmICghbV9wZW5kaW5nRXZlbnRzVGltZXIuaXNB
Y3RpdmUoKSkKICAgICAgICAgbV9wZW5kaW5nRXZlbnRzVGltZXIuc3RhcnRPbmVTaG90KDApOwog
fQpAQCAtMTc4LDE3ICsxNzgsMTcgQEAgdm9pZCBGb250TG9hZGVyOjpmaXJlUGVuZGluZ0V2ZW50
cygpCiAgICAgaWYgKG1fcGVuZGluZ0V2ZW50cy5pc0VtcHR5KCkgJiYgIW1fbG9hZGluZ0RvbmVF
dmVudCAmJiAhbV9jYWxsYmFja3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBW
ZWN0b3I8UmVmUHRyPEV2ZW50Pj4gcGVuZGluZ0V2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50
Pj4gcGVuZGluZ0V2ZW50czsKICAgICBtX3BlbmRpbmdFdmVudHMuc3dhcChwZW5kaW5nRXZlbnRz
KTsKIAogICAgIGJvb2wgbG9hZGluZ0RvbmUgPSBmYWxzZTsKICAgICBpZiAobV9sb2FkaW5nRG9u
ZUV2ZW50KSB7Ci0gICAgICAgIHBlbmRpbmdFdmVudHMuYXBwZW5kKG1fbG9hZGluZ0RvbmVFdmVu
dC5yZWxlYXNlKCkpOworICAgICAgICBwZW5kaW5nRXZlbnRzLmFwcGVuZChtX2xvYWRpbmdEb25l
RXZlbnQucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGxvYWRpbmdEb25lID0gdHJ1ZTsKICAg
ICB9CiAKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcGVuZGluZ0V2ZW50cy5z
aXplKCk7ICsraW5kZXgpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50c1tpbmRl
eF0ucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChwZW5kaW5nRXZlbnRzW2luZGV4
XSk7CiAKICAgICBpZiAobG9hZGluZ0RvbmUgJiYgIW1fY2FsbGJhY2tzLmlzRW1wdHkoKSkgewog
ICAgICAgICBWZWN0b3I8UmVmUHRyPFZvaWRDYWxsYmFjaz4+IGNhbGxiYWNrczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Rm9udExvYWRlci5oCmluZGV4IGRmYzUwMWE3ZWJlZTA5NWYyMTI1Mjk4N2ZjYjNjNmUwZGFjNGNm
YjYuLjMzNDQ1OTRlNjE4OTIwYzA5N2VlMDFiZWRmYzYxMWFiYTkxMDZkNmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRMb2FkZXIuaApAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIEV2ZW50VGFyZ2V0
RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKICAgICB1bnNpZ25lZCBtX251bUxvYWRpbmdGcm9tQ1NT
OwogICAgIHVuc2lnbmVkIG1fbnVtTG9hZGluZ0Zyb21KUzsKLSAgICBWZWN0b3I8UmVmUHRyPEV2
ZW50Pj4gbV9wZW5kaW5nRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX3BlbmRpbmdF
dmVudHM7CiAgICAgVmVjdG9yPFJlZlB0cjxWb2lkQ2FsbGJhY2s+PiBtX2NhbGxiYWNrczsKICAg
ICBSZWZQdHI8RXZlbnQ+IG1fbG9hZGluZ0RvbmVFdmVudDsKICAgICBUaW1lciBtX3BlbmRpbmdF
dmVudHNUaW1lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25D
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVy
LmNwcAppbmRleCAxMTUxYmQxZWJhNWJlNGU5NjQ4ZTRmM2E5ZDAyNDYxZGRhMzVkZGI4Li45MzA5
MmJjZmI3ZmRiOWZhNTEyODc5YzNmNTQ4OGEwNDg2MDdjMTA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wg
RGV2aWNlTW90aW9uQ29udHJvbGxlcjo6aGFzTGFzdERhdGEoKQogICAgIHJldHVybiBkZXZpY2VN
b3Rpb25DbGllbnQoKS0+bGFzdE1vdGlvbigpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50PiBEZXZp
Y2VNb3Rpb25Db250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQorUmVmUHRyPEV2ZW50PiBEZXZpY2VN
b3Rpb25Db250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQogewogICAgIHJldHVybiBEZXZpY2VNb3Rp
b25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5kZXZpY2Vtb3Rpb25FdmVudCwgZGV2aWNlTW90
aW9uQ2xpZW50KCktPmxhc3RNb3Rpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rldmlj
ZU1vdGlvbkNvbnRyb2xsZXIuaAppbmRleCA3ZDcyZDUxNWNjNmQ4MTNkYzFmMzhjNjE5ZTg5ZTJj
ZGNmZDRiOWRhLi4xNGRjNzQ0YjViNDRhZGEwNWIzZjNkYjNhZGY4OTgxZGNmOWVkYTI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogICAgIERldmljZU1vdGlvbkNsaWVudCogZGV2aWNlTW90aW9uQ2xpZW50
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzTGFzdERhdGEoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQoKSBvdmVycmlkZTsKIAogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogICAgIHN0YXRpYyBEZXZpY2VNb3Rpb25Db250
cm9sbGVyKiBmcm9tKFBhZ2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZp
Y2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9y
aWVudGF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYWNlM2IyYjIyOTYzZTgxMjYzOWI5MDgyY2Fi
ODQ2ZDEwMTdjZDUzNi4uMzk2YmY4Y2Y0MDk1ODQ4NzFmZTA2ZWE5NzNjMzBkNWQ2ZmQ4YzIzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJvbGxl
ci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI6
Omhhc0xhc3REYXRhKCkKICAgICByZXR1cm4gZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKS0+bGFz
dE9yaWVudGF0aW9uKCk7CiB9CiAKLVBhc3NSZWZQdHI8RXZlbnQ+IERldmljZU9yaWVudGF0aW9u
Q29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKK1JlZlB0cjxFdmVudD4gRGV2aWNlT3JpZW50YXRp
b25Db250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQogewogICAgIHJldHVybiBEZXZpY2VPcmllbnRh
dGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmRldmljZW9yaWVudGF0aW9uRXZlbnQsIGRl
dmljZU9yaWVudGF0aW9uQ2xpZW50KCktPmxhc3RPcmllbnRhdGlvbigpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaAppbmRleCAxMTgz
MDYzNDg2OWU5MDZlNTg3NzM3NGJiNzNhMmZkZTRlOGI5Mjg3Li5iMDFmOGQxYTYyYjA0NzkyYjM1
Zjg0M2EyZmYwMDg1N2E1MzExNDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rldmlj
ZU9yaWVudGF0aW9uQ29udHJvbGxlci5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlc3VtZVVwZGF0ZXMoKTsKICNlbHNlCiAgICAgdmlydHVhbCBib29sIGhhc0xhc3REYXRh
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQo
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgb3Zl
cnJpZGU7CiAjZW5kaWYKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMWU0OTNiODMwNjU3MzE3MDU4ODk5ODVhZjIy
Y2Y0MWJlOTY3Y2Y0YS4uZjVmYmViNGQwNmUzZWZhOWZhMmI5ZTg4MmIzMWJkZjc4YTdmM2U4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC00MDUwLDcgKzQwNTAsNyBAQCBFdmVudExpc3Rl
bmVyKiBEb2N1bWVudDo6Z2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZQogICAgIHJldHVybiBtX2RvbVdpbmRvdy0+Z2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihldmVudFR5cGUpOwogfQogCi12b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRvd0V2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gdGFy
Z2V0KQordm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dFdmVudChFdmVudCYgZXZlbnQsIEV2
ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkp
OwogICAgIGlmICghbV9kb21XaW5kb3cpCkBAIC00MDY4LDIxICs0MDY4LDIxIEBAIHZvaWQgRG9j
dW1lbnQ6OmRpc3BhdGNoV2luZG93TG9hZEV2ZW50KCkKICAgICBtX2NhY2hlZFJlc291cmNlTG9h
ZGVyLT5kb2N1bWVudERpZEZpbmlzaExvYWRFdmVudCgpOwogfQogCi12b2lkIERvY3VtZW50Ojpl
bnF1ZXVlV2luZG93RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIERvY3VtZW50
OjplbnF1ZXVlV2luZG93RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIGV2ZW50LT5z
ZXRUYXJnZXQobV9kb21XaW5kb3cuZ2V0KCkpOwotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZl
bnQoZXZlbnQpOworICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50
KSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmVucXVldWVEb2N1bWVudEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZURvY3VtZW50RXZlbnQoUmVmPEV2
ZW50PiYmIGV2ZW50KQogewogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgbV9ldmVu
dFF1ZXVlLmVucXVldWVFdmVudChldmVudCk7CisgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVu
dChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZU92ZXJmbG93
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIERvY3VtZW50OjplbnF1ZXVlT3Zl
cmZsb3dFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7Ci0gICAgbV9ldmVudFF1ZXVlLmVucXVl
dWVFdmVudChldmVudCk7CisgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudChXVEY6Om1vdmUo
ZXZlbnQpKTsKIH0KIAogUmVmUHRyPEV2ZW50PiBEb2N1bWVudDo6Y3JlYXRlRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudFR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNTk4MCwyNCArNTk4MCwy
NCBAQCB2b2lkIERvY3VtZW50OjpzZW5kV2lsbFJldmVhbEVkZ2VFdmVudHNJZk5lZWRlZChjb25z
dCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbgogICAgIC8vIEJvdHRvbSBlZGdlLgogICAgIGlm
IChuZXdQb3NpdGlvbi55KCkgPj0gd2lsbFJldmVhbEJvdHRvbU5vdGlmaWNhdGlvblBvaW50ICYm
IG5ld1Bvc2l0aW9uLnkoKSA+IG9sZFBvc2l0aW9uLnkoKQogICAgICAgICAmJiB3aWxsUmV2ZWFs
Qm90dG9tTm90aWZpY2F0aW9uUG9pbnQgPj0gb2xkUG9zaXRpb24ueSgpKSB7Ci0gICAgICAgIFJl
ZlB0cjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
d2Via2l0d2lsbHJldmVhbGJvdHRvbUV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBSZWY8
RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtp
dHdpbGxyZXZlYWxib3R0b21FdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgaWYgKCF0YXJn
ZXQpCi0gICAgICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQod2lsbFJldmVhbEV2ZW50LnJlbGVh
c2UoKSk7CisgICAgICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZl
YWxFdmVudCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHdpbGxSZXZlYWxFdmVudC0+
c2V0VGFyZ2V0KHRhcmdldCk7Ci0gICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50
KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVu
cXVldWVFdmVudChXVEY6Om1vdmUod2lsbFJldmVhbEV2ZW50KSk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBUb3AgZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueSgpIDw9IHdpbGxSZXZl
YWxUb3BOb3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi55KCkgPCBvbGRQb3NpdGlvbi55
KCkKICAgICAgICAgJiYgd2lsbFJldmVhbFRvcE5vdGlmaWNhdGlvblBvaW50IDw9IG9sZFBvc2l0
aW9uLnkoKSkgewotICAgICAgICBSZWZQdHI8RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWx0b3BFdmVudCwgZmFsc2UsIGZh
bHNlKTsKKyAgICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsdG9wRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAg
ICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KHdpbGxS
ZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KFdU
Rjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3
aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAgICAgbV9ldmVudFF1
ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAg
IG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC02MDA3LDI0ICs2MDA3LDI0IEBAIHZvaWQgRG9jdW1lbnQ6
OnNlbmRXaWxsUmV2ZWFsRWRnZUV2ZW50c0lmTmVlZGVkKGNvbnN0IEludFBvaW50JiBvbGRQb3Np
dGlvbiwgY29uCiAgICAgLy8gUmlnaHQgZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueCgpID49
IHdpbGxSZXZlYWxSaWdodE5vdGlmaWNhdGlvblBvaW50ICYmIG5ld1Bvc2l0aW9uLngoKSA+IG9s
ZFBvc2l0aW9uLngoKQogICAgICAgICAmJiB3aWxsUmV2ZWFsUmlnaHROb3RpZmljYXRpb25Qb2lu
dCA+PSBvbGRQb3NpdGlvbi54KCkpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiB3aWxsUmV2ZWFs
RXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFscmlnaHRF
dmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQg
PSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFscmlnaHRFdmVudCwg
ZmFsc2UsIGZhbHNlKTsKICAgICAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgICAgICBlbnF1ZXVl
V2luZG93RXZlbnQod2lsbFJldmVhbEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBlbnF1
ZXVlV2luZG93RXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIHdpbGxSZXZlYWxFdmVudC0+c2V0VGFyZ2V0KHRhcmdldCk7Ci0gICAg
ICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNl
KCkpOworICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudChXVEY6Om1vdmUod2ls
bFJldmVhbEV2ZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBMZWZ0IGVkZ2UuCiAg
ICAgaWYgKG5ld1Bvc2l0aW9uLngoKSA8PSB3aWxsUmV2ZWFsTGVmdE5vdGlmaWNhdGlvblBvaW50
ICYmIG5ld1Bvc2l0aW9uLngoKSA8IG9sZFBvc2l0aW9uLngoKQogICAgICAgICAmJiB3aWxsUmV2
ZWFsTGVmdE5vdGlmaWNhdGlvblBvaW50IDw9IG9sZFBvc2l0aW9uLngoKSkgewotICAgICAgICBS
ZWZQdHI8RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmtpdHdpbGxyZXZlYWxsZWZ0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIFJlZjxF
dmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0
d2lsbHJldmVhbGxlZnRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgaWYgKCF0YXJnZXQp
Ci0gICAgICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQod2lsbFJldmVhbEV2ZW50LnJlbGVhc2Uo
KSk7CisgICAgICAgICAgICBlbnF1ZXVlV2luZG93RXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxF
dmVudCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHdpbGxSZXZlYWxFdmVudC0+c2V0
VGFyZ2V0KHRhcmdldCk7Ci0gICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KHdp
bGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVl
dWVFdmVudChXVEY6Om1vdmUod2lsbFJldmVhbEV2ZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAj
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAwM2QwYjQ1Y2Q3MTQ5NTFlN2Q1YWYwNDRjOWVm
YjlhYWM2MWM1MTY5Li5iNWZmM2Q0ZWMzNzFjMjFmNjBlNzY0YjJkODE1MzlmMGUyN2Y0MDVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzg4LDcgKzc4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpOwogICAgIHZvaWQgc2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7
CiAgICAgRXZlbnRMaXN0ZW5lciogZ2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaXNw
YXRjaFdpbmRvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0
PiA9IG51bGxwdHIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hXaW5kb3dFdmVu
dChFdmVudCYsIEV2ZW50VGFyZ2V0KiA9IG51bGxwdHIpOwogICAgIHZvaWQgZGlzcGF0Y2hXaW5k
b3dMb2FkRXZlbnQoKTsKIAogICAgIFJlZlB0cjxFdmVudD4gY3JlYXRlRXZlbnQoY29uc3QgU3Ry
aW5nJiBldmVudFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTEwOTIsOSArMTA5Miw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkgY29uc3Qgb3ZlcnJpZGUg
ZmluYWw7CiAgICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSBjb25zdCBv
dmVycmlkZSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBlbnF1ZXVlV2luZG93
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZvaWQgZW5xdWV1ZURvY3VtZW50RXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZvaWQgZW5xdWV1ZU92ZXJmbG93RXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pOworICAgIHZvaWQgZW5xdWV1ZVdpbmRvd0V2ZW50KFJlZjxFdmVudD4mJik7
CisgICAgdm9pZCBlbnF1ZXVlRG9jdW1lbnRFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZvaWQg
ZW5xdWV1ZU92ZXJmbG93RXZlbnQoUmVmPEV2ZW50PiYmKTsKICAgICB2b2lkIGVucXVldWVQYWdl
c2hvd0V2ZW50KFBhZ2VzaG93RXZlbnRQZXJzaXN0ZW5jZSk7CiAgICAgdm9pZCBlbnF1ZXVlSGFz
aGNoYW5nZUV2ZW50KGNvbnN0IFN0cmluZyYgb2xkVVJMLCBjb25zdCBTdHJpbmcmIG5ld1VSTCk7
CiAgICAgdm9pZCBlbnF1ZXVlUG9wc3RhdGVFdmVudChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gc3RhdGVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50RXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1
ZXVlLmNwcAppbmRleCBhN2JiNWRmZTJjYWY4NDhkNGY1ZjkyZTI4MWM5NzMyZTQ4YTJlOWY5Li44
ZWE1ZWMwMzc0YmQxMzc4ODcxZDJhNjJkOTRhOWI5NzgyMGJjNmMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmNwcApAQCAtNjgsMTUgKzY4LDE1IEBAIERvY3VtZW50
RXZlbnRRdWV1ZTo6fkRvY3VtZW50RXZlbnRRdWV1ZSgpCiB7CiB9CiAKLWJvb2wgRG9jdW1lbnRF
dmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIERv
Y3VtZW50RXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAg
ICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsKLSAgICBBU1NFUlQoIW1fcXVldWVkRXZlbnRzLmNv
bnRhaW5zKGV2ZW50LmdldCgpKSk7CisgICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250YWlu
cyhldmVudC5wdHIoKSkpOwogCiAgICAgaWYgKG1faXNDbG9zZWQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIG1fcXVldWVkRXZlbnRzLmFkZChldmVudCk7CisgICAgbV9xdWV1ZWRFdmVu
dHMuYWRkKGV2ZW50LnB0cigpKTsKICAgICBpZiAoIW1fcGVuZGluZ0V2ZW50VGltZXItPmlzQWN0
aXZlKCkpCiAgICAgICAgIG1fcGVuZGluZ0V2ZW50VGltZXItPnN0YXJ0T25lU2hvdCgwKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTk5LDkgKzk5LDkgQEAgdm9pZCBEb2N1bWVudEV2ZW50UXVldWU6
OmVucXVldWVPckRpc3BhdGNoU2Nyb2xsRXZlbnQoTm9kZSYgdGFyZ2V0KQogICAgIGJvb2wgYnVi
YmxlcyA9IHRhcmdldC5pc0RvY3VtZW50Tm9kZSgpOwogICAgIGJvb2wgY2FuY2VsYWJsZSA9IGZh
bHNlOwogCi0gICAgUmVmUHRyPEV2ZW50PiBzY3JvbGxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLnNjcm9sbEV2ZW50LCBidWJibGVzLCBjYW5jZWxhYmxlKTsKKyAgICBSZWY8RXZl
bnQ+IHNjcm9sbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQs
IGJ1YmJsZXMsIGNhbmNlbGFibGUpOwogICAgIHNjcm9sbEV2ZW50LT5zZXRUYXJnZXQoJnRhcmdl
dCk7Ci0gICAgZW5xdWV1ZUV2ZW50KHNjcm9sbEV2ZW50LnJlbGVhc2UoKSk7CisgICAgZW5xdWV1
ZUV2ZW50KFdURjo6bW92ZShzY3JvbGxFdmVudCkpOwogfQogCiBib29sIERvY3VtZW50RXZlbnRR
dWV1ZTo6Y2FuY2VsRXZlbnQoRXZlbnQmIGV2ZW50KQpAQCAtMTQ2LDkgKzE0Niw5IEBAIHZvaWQg
RG9jdW1lbnRFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKICAgICAvLyBX
aHkgZG8gd2UgaGF2ZSB0aGlzIHNwZWNpYWwgY2FzZSBoZXJlIGluc3RlYWQgb2YgYSB2aXJ0dWFs
IGZ1bmN0aW9uIG9uIEV2ZW50VGFyZ2V0PwogICAgIEV2ZW50VGFyZ2V0JiBldmVudFRhcmdldCA9
ICpldmVudC50YXJnZXQoKTsKICAgICBpZiAoRE9NV2luZG93KiB3aW5kb3cgPSBldmVudFRhcmdl
dC50b0RPTVdpbmRvdygpKQotICAgICAgICB3aW5kb3ctPmRpc3BhdGNoRXZlbnQoJmV2ZW50LCAw
KTsKKyAgICAgICAgd2luZG93LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBudWxscHRyKTsKICAgICBl
bHNlCi0gICAgICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQoJmV2ZW50KTsKKyAgICAgICAg
ZXZlbnRUYXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudEV2ZW50UXVldWUuaAppbmRleCA5ODI1ZWQyZjYwN2E0MmE4N2I1MTEzM2E5Yjgx
NWU1NWVmMjMwZWRjLi43ZDExMWQyZDRiNWJhNjljOGIzZTdjMjJmODc0NGNlNzk2NzUzYjlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oCkBAIC00NCw3ICs0NCw3IEBA
IHB1YmxpYzoKICAgICBleHBsaWNpdCBEb2N1bWVudEV2ZW50UXVldWUoRG9jdW1lbnQmKTsKICAg
ICB2aXJ0dWFsIH5Eb2N1bWVudEV2ZW50UXVldWUoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBlbnF1
ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBl
bnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Y2VsRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSBvdmVy
cmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDk4YTYxMGZlZDFjNmE5NTRmYTE0Mjc0
ZWY5Y2FlMmNmOGE3Mzk4M2MuLjNkNzNkZWE2OGZmNGQzNThjYzEwOGJkYmZjYmE1Mzc1Mzg3NTMz
YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTI1Myw3ICsyNTMsNyBAQCBib29sIEVsZW1l
bnQ6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3Jt
RXZlbnQsIGNvbnN0CiAgICAgaWYgKGlzRm9yY2VFdmVudChwbGF0Zm9ybUV2ZW50KSAmJiAhZG9j
dW1lbnQoKS5oYXNMaXN0ZW5lclR5cGVGb3JFdmVudFR5cGUocGxhdGZvcm1FdmVudC50eXBlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VF
dmVudCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGRvY3VtZW50KCkuZGVmYXVsdFZp
ZXcoKSwgcGxhdGZvcm1FdmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0KTsKKyAgICBSZWY8TW91
c2VFdmVudD4gbW91c2VFdmVudCA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGRvY3Vt
ZW50KCkuZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm1FdmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0
KTsKIAogICAgIGlmIChtb3VzZUV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gU2hvdWxkbid0IGhhcHBlbi4KQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIEVs
ZW1lbnQ6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRm
b3JtRXZlbnQsIGNvbnN0CiAgICAgICAgIC8vIFNwZWNpYWwgY2FzZTogSWYgaXQncyBhIGRvdWJs
ZSBjbGljayBldmVudCwgd2UgYWxzbyBzZW5kIHRoZSBkYmxjbGljayBldmVudC4gVGhpcyBpcyBu
b3QgcGFydAogICAgICAgICAvLyBvZiB0aGUgRE9NIHNwZWNzLCBidXQgaXMgdXNlZCBmb3IgY29t
cGF0aWJpbGl0eSB3aXRoIHRoZSBvbmRibGNsaWNrPSIiIGF0dHJpYnV0ZS4gVGhpcyBpcyB0cmVh
dGVkCiAgICAgICAgIC8vIGFzIGEgc2VwYXJhdGUgZXZlbnQgaW4gb3RoZXIgRE9NLWNvbXBsaWFu
dCBicm93c2VycyBsaWtlIEZpcmVmb3gsIGFuZCBzbyB3ZSBkbyB0aGUgc2FtZS4KLSAgICAgICAg
UmVmUHRyPE1vdXNlRXZlbnQ+IGRvdWJsZUNsaWNrRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUo
KTsKKyAgICAgICAgUmVmPE1vdXNlRXZlbnQ+IGRvdWJsZUNsaWNrRXZlbnQgPSBNb3VzZUV2ZW50
OjpjcmVhdGUoKTsKICAgICAgICAgZG91YmxlQ2xpY2tFdmVudC0+aW5pdE1vdXNlRXZlbnQoZXZl
bnROYW1lcygpLmRibGNsaWNrRXZlbnQsCiAgICAgICAgICAgICBtb3VzZUV2ZW50LT5idWJibGVz
KCksIG1vdXNlRXZlbnQtPmNhbmNlbGFibGUoKSwgbW91c2VFdmVudC0+dmlldygpLCBtb3VzZUV2
ZW50LT5kZXRhaWwoKSwKICAgICAgICAgICAgIG1vdXNlRXZlbnQtPnNjcmVlblgoKSwgbW91c2VF
dmVudC0+c2NyZWVuWSgpLCBtb3VzZUV2ZW50LT5jbGllbnRYKCksIG1vdXNlRXZlbnQtPmNsaWVu
dFkoKSwKQEAgLTI4NSw3ICsyODUsNyBAQCBib29sIEVsZW1lbnQ6OmRpc3BhdGNoTW91c2VFdmVu
dChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtRXZlbnQsIGNvbnN0CiAKIGJvb2wg
RWxlbWVudDo6ZGlzcGF0Y2hXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZl
bnQpCiB7Ci0gICAgUmVmUHRyPFdoZWVsRXZlbnQ+IHdoZWVsRXZlbnQgPSBXaGVlbEV2ZW50Ojpj
cmVhdGUoZXZlbnQsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSk7CisgICAgUmVmPFdoZWVsRXZl
bnQ+IHdoZWVsRXZlbnQgPSBXaGVlbEV2ZW50OjpjcmVhdGUoZXZlbnQsIGRvY3VtZW50KCkuZGVm
YXVsdFZpZXcoKSk7CiAKICAgICAvLyBFdmVudHMgd2l0aCBubyBkZWx0YXMgYXJlIGltcG9ydGFu
dCBiZWNhdXNlIHRoZXkgY29udmV5IHBsYXRmb3JtIGluZm9ybWF0aW9uIGFib3V0IHNjcm9sbCBn
ZXN0dXJlcwogICAgIC8vIGFuZCBtb21lbnR1bSBiZWdpbm5pbmcgb3IgZW5kaW5nLiBIb3dldmVy
LCB0aG9zZSBldmVudHMgc2hvdWxkIG5vdCBiZSBzZW50IHRvIHRoZSBET00gc2luY2Ugc29tZQpA
QCAtMzAwLDkgKzMwMCw5IEBAIGJvb2wgRWxlbWVudDo6ZGlzcGF0Y2hXaGVlbEV2ZW50KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCiAKIGJvb2wgRWxlbWVudDo6ZGlzcGF0Y2hLZXlF
dmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIHBsYXRmb3JtRXZlbnQpCiB7Ci0gICAg
UmVmUHRyPEtleWJvYXJkRXZlbnQ+IGV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRm
b3JtRXZlbnQsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSk7CisgICAgUmVmPEtleWJvYXJkRXZl
bnQ+IGV2ZW50ID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRmb3JtRXZlbnQsIGRvY3VtZW50
KCkuZGVmYXVsdFZpZXcoKSk7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJh
bWUoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxlcigpLmFjY2Vzc2liaWxpdHlQ
cmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oZXZlbnQuZ2V0KCkpKQorICAgICAgICBpZiAoZnJhbWUt
PmV2ZW50SGFuZGxlcigpLmFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oZXZl
bnQpKQogICAgICAgICAgICAgZXZlbnQtPnN0b3BQcm9wYWdhdGlvbigpOwogICAgIH0KICAgICBy
ZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMsIGV2ZW50KSAmJiAhZXZl
bnQtPmRlZmF1bHRIYW5kbGVkKCk7CkBAIC0yMzI0LDcgKzIzMjQsNyBAQCBib29sIEVsZW1lbnQ6
OmRpc3BhdGNoTW91c2VGb3JjZVdpbGxCZWdpbigpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9ybU1vdXNlRXZlbnQoZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSwgZnJhbWUtPmV2ZW50SGFuZGxlcigpLmxh
c3RLbm93bk1vdXNlR2xvYmFsUG9zaXRpb24oKSwgTm9CdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok5v
VHlwZSwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIFdURjo6Y3VycmVudFRpbWUoKSwg
Rm9yY2VBdENsaWNrKTsKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbW91c2VGb3JjZVdpbGxCZWdp
bkV2ZW50ID0gIE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0bW91c2Vmb3Jj
ZXdpbGxiZWdpbkV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtTW91c2VF
dmVudCwgMCwgbnVsbHB0cik7CisgICAgUmVmPE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VXaWxsQmVn
aW5FdmVudCA9ICBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9y
Y2V3aWxsYmVnaW5FdmVudCwgZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNl
RXZlbnQsIDAsIG51bGxwdHIpOwogICAgIG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudC0+c2V0VGFy
Z2V0KHRoaXMpOwogICAgIGRpc3BhdGNoRXZlbnQobW91c2VGb3JjZVdpbGxCZWdpbkV2ZW50KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudC5jcHAKaW5kZXggNTk2ZGQ4NThhMDRjMzYzYTc1ZTQ4ZWFjZjhhNzRhNWE4
ZDZlZTg1NS4uNWMxZTZmZTcwMTI3OGNkZTVhZTZlMDNlZDg1YTVlMjc0ZDc5YTBjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnQuY3BwCkBAIC0xNjIsMTIgKzE2MiwxMiBAQCBQYXNzUmVmUHRyPEV2ZW50PiBFdmVu
dDo6Y2xvbmVGb3IoSFRNTElGcmFtZUVsZW1lbnQqKSBjb25zdAogICAgIHJldHVybiBFdmVudDo6
Y3JlYXRlKHR5cGUoKSwgYnViYmxlcygpLCBjYW5jZWxhYmxlKCkpOwogfQogCi12b2lkIEV2ZW50
OjpzZXRUYXJnZXQoUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KQordm9pZCBFdmVudDo6
c2V0VGFyZ2V0KFJlZlB0cjxFdmVudFRhcmdldD4mJiB0YXJnZXQpCiB7CiAgICAgaWYgKG1fdGFy
Z2V0ID09IHRhcmdldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90YXJnZXQgPSB0YXJnZXQ7
CisgICAgbV90YXJnZXQgPSBXVEY6Om1vdmUodGFyZ2V0KTsKICAgICBpZiAobV90YXJnZXQpCiAg
ICAgICAgIHJlY2VpdmVkVGFyZ2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCmluZGV4IDA5ZTc3OGQ1MTM2
ZmYwZmNhODZlNGRjMjlmZWJhYWU4OWMyMTdmMGMuLjBjY2NlMTA4ODUzODg1MmUzMWQ0ZjM0MjE2
Y2VjZDE4ZTg5NDIzM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpIHsgbV90eXBlID0g
dHlwZTsgfQogICAgIAogICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBt
X3RhcmdldC5nZXQoKTsgfQotICAgIHZvaWQgc2V0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJn
ZXQ+KTsKKyAgICB2b2lkIHNldFRhcmdldChSZWZQdHI8RXZlbnRUYXJnZXQ+JiYpOwogCiAgICAg
RXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUYXJn
ZXQ7IH0KICAgICB2b2lkIHNldEN1cnJlbnRUYXJnZXQoRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJn
ZXQpIHsgbV9jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCAyYmRjMzUwYjVhNWY3NjMzMGIyZDdkYjc2ODJiNzZm
ODg2NTNhYTJkLi4zNDE4NDdmZDM4MDI4OGYzMDBlMGQ4M2I2YjA0M2RhYmU1MjE3NDk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtNzAsOSArNzAsOSBAQCBib29s
IFdpbmRvd0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50KQogICAg
IGlmICghbV93aW5kb3cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGV2ZW50LnNldFRh
cmdldChtX3RhcmdldC5nZXQoKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KG1fdGFyZ2V0LmNvcHlS
ZWYoKSk7CiAgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChtX3dpbmRvdy5nZXQoKSk7Ci0gICAg
bV93aW5kb3ctPmZpcmVFdmVudExpc3RlbmVycygmZXZlbnQpOworICAgIG1fd2luZG93LT5maXJl
RXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMDEsMTAg
KzIwMSwxMCBAQCBpbmxpbmUgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rhcmdl
dFJ1bGVzKE5vZGUmIHJlZmVyZW5jZU5vZGUpCiAgICAgcmV0dXJuICZyZWZlcmVuY2VOb2RlOwog
fQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiBub2Rl
LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aFNjb3BlZEV2ZW50KE5vZGUmIG5vZGUsIEV2ZW50JiBldmVudCkKIHsKICAgICAvLyBXZSBuZWVk
IHRvIHNldCB0aGUgdGFyZ2V0IGhlcmUgYmVjYXVzZSBpdCBjYW4gZ28gYXdheSBieSB0aGUgdGlt
ZSB3ZSBhY3R1YWxseSBmaXJlIHRoZSBldmVudC4KLSAgICBldmVudC0+c2V0VGFyZ2V0KGV2ZW50
VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpKTsKKyAgICBldmVudC5zZXRUYXJnZXQo
ZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobm9kZSkpOwogICAgIFNjb3BlZEV2ZW50
UXVldWU6OnNpbmdsZXRvbigpLmVucXVldWVFdmVudChldmVudCk7CiB9CiAKQEAgLTMwMCwyMyAr
MzAwLDE5IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoRXZlbnRJbkRPTShFdmVudCYgZXZlbnQsIGNv
bnN0IEV2ZW50UGF0aCYgcGF0aCwgV2luZG93RXZlbnRDCiAgICAgfQogfQogCi1ib29sIEV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+
IHBycEV2ZW50KQorYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogb3Jp
Z2luLCBFdmVudCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkp
OwotICAgIGlmICghcHJwRXZlbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCiAgICAgQVNTRVJU
KG9yaWdpbik7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUob3JpZ2luKTsKLSAgICBSZWZQdHI8RXZl
bnQ+IGV2ZW50KHBycEV2ZW50KTsKICAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gbm9kZS0+
ZG9jdW1lbnQoKS52aWV3KCk7Ci0gICAgRXZlbnRQYXRoIGV2ZW50UGF0aCgqbm9kZSwgKmV2ZW50
KTsKKyAgICBFdmVudFBhdGggZXZlbnRQYXRoKCpub2RlLCBldmVudCk7CiAKLSAgICBpZiAoRXZl
bnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQgPSBldmVudC0+cmVsYXRlZFRhcmdldCgpKQorICAgIGlm
IChFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQoKSkKICAg
ICAgICAgZXZlbnRQYXRoLnNldFJlbGF0ZWRUYXJnZXQoKm5vZGUsICpyZWxhdGVkVGFyZ2V0KTsK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGlmIChpczxU
b3VjaEV2ZW50PigqZXZlbnQpKSB7Ci0gICAgICAgIGlmICghZXZlbnRQYXRoLnVwZGF0ZVRvdWNo
TGlzdHMoZG93bmNhc3Q8VG91Y2hFdmVudD4oKmV2ZW50KSkpCisgICAgaWYgKGlzPFRvdWNoRXZl
bnQ+KGV2ZW50KSkgeworICAgICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRv
d25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAjZW5kaWYKQEAgLTMyNCw4ICszMjAsOCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogICAg
IENoaWxkTm9kZXNMYXp5U25hcHNob3Q6OnRha2VDaGlsZE5vZGVzTGF6eVNuYXBzaG90KCk7CiAK
ICAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVs
ZXMoKm5vZGUpOwotICAgIGV2ZW50LT5zZXRUYXJnZXQodGFyZ2V0KTsKLSAgICBpZiAoIWV2ZW50
LT50YXJnZXQoKSkKKyAgICBldmVudC5zZXRUYXJnZXQodGFyZ2V0KTsKKyAgICBpZiAoIWV2ZW50
LnRhcmdldCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnREaXNwYXRj
aEZvcmJpZGRlbigpKTsKQEAgLTMzNCwzMCArMzMwLDMwIEBAIGJvb2wgRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZW50KE5vZGUqIG9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQp
CiAKICAgICBJbnB1dEVsZW1lbnRDbGlja1N0YXRlIGNsaWNrSGFuZGxpbmdTdGF0ZTsKICAgICBp
ZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpKQotICAgICAgICBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50Pigqbm9kZSkud2lsbERpc3BhdGNoRXZlbnQoKmV2ZW50LCBjbGlja0hhbmRsaW5n
U3RhdGUpOworICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkud2lsbERp
c3BhdGNoRXZlbnQoZXZlbnQsIGNsaWNrSGFuZGxpbmdTdGF0ZSk7CiAKLSAgICBpZiAoIWV2ZW50
LT5wcm9wYWdhdGlvblN0b3BwZWQoKSAmJiAhZXZlbnRQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAg
ZGlzcGF0Y2hFdmVudEluRE9NKCpldmVudCwgZXZlbnRQYXRoLCB3aW5kb3dFdmVudENvbnRleHQp
OworICAgIGlmICghZXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2ZW50UGF0aC5pc0Vt
cHR5KCkpCisgICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTShldmVudCwgZXZlbnRQYXRoLCB3aW5k
b3dFdmVudENvbnRleHQpOwogCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3Bl
Y3RpbmdUYXJnZXRSdWxlcygqbm9kZSkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51
bGxwdHIpOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOworICAgIGV2ZW50LnNldFRhcmdl
dChldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcygqbm9kZSkpOworICAgIGV2ZW50LnNl
dEN1cnJlbnRUYXJnZXQobnVsbHB0cik7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsKIAog
ICAgIGlmIChjbGlja0hhbmRsaW5nU3RhdGUuc3RhdGVmdWwpCi0gICAgICAgIGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCpub2RlKS5kaWREaXNwYXRjaENsaWNrRXZlbnQoKmV2ZW50LCBjbGlj
a0hhbmRsaW5nU3RhdGUpOworICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9k
ZSkuZGlkRGlzcGF0Y2hDbGlja0V2ZW50KGV2ZW50LCBjbGlja0hhbmRsaW5nU3RhdGUpOwogCiAg
ICAgLy8gQ2FsbCBkZWZhdWx0IGV2ZW50IGhhbmRsZXJzLiBXaGlsZSB0aGUgRE9NIGRvZXMgaGF2
ZSBhIGNvbmNlcHQgb2YgcHJldmVudGluZwogICAgIC8vIGRlZmF1bHQgaGFuZGxpbmcsIHRoZSBk
ZXRhaWwgb2Ygd2hpY2ggaGFuZGxlcnMgYXJlIGNhbGxlZCBpcyBhbiBpbnRlcm5hbAogICAgIC8v
IGltcGxlbWVudGF0aW9uIGRldGFpbCBhbmQgbm90IHBhcnQgb2YgdGhlIERPTS4KLSAgICBpZiAo
IWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkgJiYgIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQot
ICAgICAgICBjYWxsRGVmYXVsdEV2ZW50SGFuZGxlcnNJblRoZUJ1YmJsaW5nT3JkZXIoKmV2ZW50
LCBldmVudFBhdGgpOworICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCgpICYmICFldmVu
dC5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICBjYWxsRGVmYXVsdEV2ZW50SGFuZGxlcnNJblRo
ZUJ1YmJsaW5nT3JkZXIoZXZlbnQsIGV2ZW50UGF0aCk7CiAKICAgICAvLyBFbnN1cmUgdGhhdCBh
ZnRlciBldmVudCBkaXNwYXRjaCwgdGhlIGV2ZW50J3MgdGFyZ2V0IG9iamVjdCBpcyB0aGUKICAg
ICAvLyBvdXRlcm1vc3Qgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICBldmVudC0+c2V0VGFyZ2V0
KHdpbmRvd0V2ZW50Q29udGV4dC50YXJnZXQoKSk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJn
ZXQobnVsbHB0cik7CisgICAgZXZlbnQuc2V0VGFyZ2V0KHdpbmRvd0V2ZW50Q29udGV4dC50YXJn
ZXQoKSk7CisgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKIAotICAgIHJldHVy
biAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQ
cmV2ZW50ZWQoKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHNob3VsZEV2ZW50Q3Jvc3NTaGFk
b3dCb3VuZGFyeShFdmVudCYgZXZlbnQsIFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QsIEV2ZW50VGFy
Z2V0JiB0YXJnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRj
aGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggNjQwNDBk
ZDNjYzRiZTg3YmViNjE4YzIwOWNmNDlmMjJjNDA2NTRkMi4uZjE4OWQ3YTRkZjJiODVkMjdhZjc0
NWNmYWUzYWFlNDY4MGRhOTM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApA
QCAtMzgsMTEgKzM4LDExIEBAIGNsYXNzIE5vZGU7CiAKIG5hbWVzcGFjZSBFdmVudERpc3BhdGNo
ZXIgewogCi1ib29sIGRpc3BhdGNoRXZlbnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnQ+KTsKLXZv
aWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiwgUGFzc1JlZlB0cjxFdmVudD4pOworYm9vbCBk
aXNwYXRjaEV2ZW50KE5vZGUqLCBFdmVudCYpOwordm9pZCBkaXNwYXRjaFNjb3BlZEV2ZW50KE5v
ZGUmLCBFdmVudCYpOwogdm9pZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKEVsZW1lbnQqLCBFdmVu
dCogdW5kZXJseWluZ0V2ZW50LCBTaW11bGF0ZWRDbGlja01vdXNlRXZlbnRPcHRpb25zLCBTaW11
bGF0ZWRDbGlja1Zpc3VhbE9wdGlvbnMpOwogCi19OworfQogCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRR
dWV1ZS5oCmluZGV4IGU5OTM0YzUwOGMyZjE2NDlkNTRiODBiNjU4ZmY2ZGNiYjQxN2UxZjcuLmFj
MzllYzYxN2FmOGVkNDYyYTUxY2RlZTdhMTVkMWY0ODgyODRiMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
UXVldWUuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50UXVldWUg
ewogcHVibGljOgogICAgIHZpcnR1YWwgfkV2ZW50UXVldWUoKSB7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSA9IDA7CisgICAgdmlydHVhbCBib29s
IGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuY2Vs
RXZlbnQoRXZlbnQmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOyAvLyBEaXNj
YXJkIGFjY3VtdWxhdGVkIGV2ZW50cyBhbmQgYWxsIGZ1dHVyZSBldmVudHMuIE5vIGV2ZW50cyB3
aWxsIGJlIGRpc3BhdGNoZWQgYWZ0ZXIgdGhpcy4KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmNwcAppbmRleCA3NjJhNmE1MjhmMzUxMzQzM2NkYmRjZjk0MGE2ZTYyOTc5NzM2MjViLi5mZmRk
ZWE5NDc1ZTY5OWFlZWRkYTI0YmJmYTFhOGQ0MWU5NDYzYjAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5jcHAKQEAgLTEzNCw3ICsxMzQsNyBAQCBib29sIEV2ZW50VGFyZ2V0OjpjbGVhckF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCiAgICAg
cmV0dXJuIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpOwog
fQogCi1ib29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQo
RXZlbnQqIGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWV2ZW50KSB7CiAg
ICAgICAgIGVjID0gVHlwZUVycm9yOwpAQCAtMTQ5LDE2ICsxNDksMTkgQEAgYm9vbCBFdmVudFRh
cmdldDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4g
ZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogfQogCi1ib29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hF
dmVudChFdmVudCYgZXZlbnQpCiB7Ci0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBl
dmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZShF
dmVudDo6QVRfVEFSR0VUKTsKLSAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBmaXJlRXZlbnRM
aXN0ZW5lcnMoZXZlbnQuZ2V0KCkpOwotICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOworICAg
IEFTU0VSVChldmVudC5pc0luaXRpYWxpemVkKCkpOworICAgIEFTU0VSVCghZXZlbnQuaXNCZWlu
Z0Rpc3BhdGNoZWQoKSk7CisKKyAgICBldmVudC5zZXRUYXJnZXQodGhpcyk7CisgICAgZXZlbnQu
c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICBldmVudC5zZXRFdmVudFBoYXNlKEV2ZW50OjpB
VF9UQVJHRVQpOworICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCA9IGZpcmVFdmVudExpc3RlbmVy
cyhldmVudCk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZSgwKTsKICAgICByZXR1cm4gZGVmYXVs
dFByZXZlbnRlZDsKIH0KIApAQCAtMTY2LDMwICsxNjksMzAgQEAgdm9pZCBFdmVudFRhcmdldDo6
dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCiB7CiB9CiAKLXN0YXRpYyBjb25zdCBB
dG9taWNTdHJpbmcmIGxlZ2FjeVR5cGUoY29uc3QgRXZlbnQqIGV2ZW50KQorc3RhdGljIGNvbnN0
IEF0b21pY1N0cmluZyYgbGVnYWN5VHlwZShjb25zdCBFdmVudCYgZXZlbnQpCiB7Ci0gICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50KQorICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50KQogICAgICAg
ICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50OwogCi0gICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQpCisgICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uc3RhcnRFdmVudCkKICAg
ICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2ZW50OwogCi0g
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbml0ZXJhdGlvbkV2
ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbml0ZXJh
dGlvbkV2ZW50KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkl0
ZXJhdGlvbkV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRy
YW5zaXRpb25lbmRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS50
cmFuc2l0aW9uZW5kRXZlbnQpCiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkud2Via2l0VHJh
bnNpdGlvbkVuZEV2ZW50OwogCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LndoZWVsRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2hlZWxF
dmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQ7CiAKICAg
ICByZXR1cm4gZW1wdHlBdG9tOwogfQogCi1ib29sIEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0
ZW5lcnMoRXZlbnQqIGV2ZW50KQorYm9vbCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJz
KEV2ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigh
Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0g
ICAgQVNTRVJUKGV2ZW50ICYmIGV2ZW50LT5pc0luaXRpYWxpemVkKCkpOworICAgIEFTU0VSVChl
dmVudC5pc0luaXRpYWxpemVkKCkpOwogCiAgICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZXZlbnRU
YXJnZXREYXRhKCk7CiAgICAgaWYgKCFkKQpAQCAtMjAwLDIxICsyMDMsMjEgQEAgYm9vbCBFdmVu
dFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCkKICAgICBpZiAoIWxlZ2Fj
eVR5cGVOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgbGVnYWN5TGlzdGVuZXJzVmVjdG9yID0gZC0+
ZXZlbnRMaXN0ZW5lck1hcC5maW5kKGxlZ2FjeVR5cGVOYW1lKTsKIAotICAgIEV2ZW50TGlzdGVu
ZXJWZWN0b3IqIGxpc3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAuZmluZChldmVu
dC0+dHlwZSgpKTsKKyAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lcnNWZWN0b3IgPSBk
LT5ldmVudExpc3RlbmVyTWFwLmZpbmQoZXZlbnQudHlwZSgpKTsKIAogICAgIGlmIChsaXN0ZW5l
cnNWZWN0b3IpCiAgICAgICAgIGZpcmVFdmVudExpc3RlbmVycyhldmVudCwgZCwgKmxpc3RlbmVy
c1ZlY3Rvcik7CiAgICAgZWxzZSBpZiAobGVnYWN5TGlzdGVuZXJzVmVjdG9yKSB7Ci0gICAgICAg
IEF0b21pY1N0cmluZyB0eXBlTmFtZSA9IGV2ZW50LT50eXBlKCk7Ci0gICAgICAgIGV2ZW50LT5z
ZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKKyAgICAgICAgQXRvbWljU3RyaW5nIHR5cGVOYW1lID0g
ZXZlbnQudHlwZSgpOworICAgICAgICBldmVudC5zZXRUeXBlKGxlZ2FjeVR5cGVOYW1lKTsKICAg
ICAgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBkLCAqbGVnYWN5TGlzdGVuZXJzVmVjdG9y
KTsKLSAgICAgICAgZXZlbnQtPnNldFR5cGUodHlwZU5hbWUpOworICAgICAgICBldmVudC5zZXRU
eXBlKHR5cGVOYW1lKTsKICAgICB9CiAKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVu
dGVkKCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAgICAgICAg
IAotdm9pZCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCwgRXZl
bnRUYXJnZXREYXRhKiBkLCBFdmVudExpc3RlbmVyVmVjdG9yJiBlbnRyeSkKK3ZvaWQgRXZlbnRU
YXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQsIEV2ZW50VGFyZ2V0RGF0YSog
ZCwgRXZlbnRMaXN0ZW5lclZlY3RvciYgZW50cnkpCiB7CiAgICAgUmVmPEV2ZW50VGFyZ2V0PiBw
cm90ZWN0KCp0aGlzKTsKIApAQCAtMjI2LDMyICsyMjksMzIgQEAgdm9pZCBFdmVudFRhcmdldDo6
ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCwgRXZlbnRUYXJnZXREYXRhKiBkLCBFdmVu
dExpc3QKICAgICBzaXplX3Qgc2l6ZSA9IGVudHJ5LnNpemUoKTsKICAgICBpZiAoIWQtPmZpcmlu
Z0V2ZW50SXRlcmF0b3JzKQogICAgICAgICBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycyA9IHN0ZDo6
bWFrZV91bmlxdWU8RmlyaW5nRXZlbnRJdGVyYXRvclZlY3Rvcj4oKTsKLSAgICBkLT5maXJpbmdF
dmVudEl0ZXJhdG9ycy0+YXBwZW5kKEZpcmluZ0V2ZW50SXRlcmF0b3IoZXZlbnQtPnR5cGUoKSwg
aSwgc2l6ZSkpOworICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5hcHBlbmQoRmlyaW5nRXZl
bnRJdGVyYXRvcihldmVudC50eXBlKCksIGksIHNpemUpKTsKIAogICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbnVsbHB0cjsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUgd2lsbERpc3BhdGNoRXZlbnRDb29raWU7CiAgICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0
KSkgewogICAgICAgICBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKLSAg
ICAgICAgd2lsbERpc3BhdGNoRXZlbnRDb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxEaXNwYXRjaEV2ZW50KCpkb2N1bWVudCwgKmV2ZW50LCBzaXplID4gMCk7CisgICAgICAg
IHdpbGxEaXNwYXRjaEV2ZW50Q29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
RGlzcGF0Y2hFdmVudCgqZG9jdW1lbnQsIGV2ZW50LCBzaXplID4gMCk7CiAgICAgfQogCiAgICAg
Zm9yICg7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIm
IHJlZ2lzdGVyZWRMaXN0ZW5lciA9IGVudHJ5W2ldOwotICAgICAgICBpZiAoZXZlbnQtPmV2ZW50
UGhhc2UoKSA9PSBFdmVudDo6Q0FQVFVSSU5HX1BIQVNFICYmICFyZWdpc3RlcmVkTGlzdGVuZXIu
dXNlQ2FwdHVyZSkKKyAgICAgICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UoKSA9PSBFdmVudDo6Q0FQ
VFVSSU5HX1BIQVNFICYmICFyZWdpc3RlcmVkTGlzdGVuZXIudXNlQ2FwdHVyZSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZXZlbnQtPmV2ZW50UGhhc2UoKSA9PSBFdmVudDo6
QlVCQkxJTkdfUEhBU0UgJiYgcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUpCisgICAgICAg
IGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJVQkJMSU5HX1BIQVNFICYmIHJlZ2lz
dGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgLy8gSWYgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIGhhcyBiZWVuIGNhbGxlZCwgd2UganVz
dCBicmVhayBvdXQgaW1tZWRpYXRlbHksIHdpdGhvdXQKICAgICAgICAgLy8gaGFuZGxpbmcgYW55
IG1vcmUgZXZlbnRzIG9uIHRoaXMgdGFyZ2V0LgotICAgICAgICBpZiAoZXZlbnQtPmltbWVkaWF0
ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBpZiAoZXZlbnQuaW1tZWRpYXRlUHJvcGFn
YXRpb25TdG9wcGVkKCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsSGFuZGxlRXZlbnQoY29udGV4dCwgKmV2ZW50KTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEhh
bmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKICAgICAgICAgLy8gVG8gbWF0Y2ggTW96aWxsYSwg
dGhlIEFUX1RBUkdFVCBwaGFzZSBmaXJlcyBib3RoIGNhcHR1cmluZyBhbmQgYnViYmxpbmcKICAg
ICAgICAgLy8gZXZlbnQgbGlzdGVuZXJzLCBldmVuIHRob3VnaCB0aGF0IHZpb2xhdGVzIHNvbWUg
dmVyc2lvbnMgb2YgdGhlIERPTSBzcGVjLgotICAgICAgICByZWdpc3RlcmVkTGlzdGVuZXIubGlz
dGVuZXItPmhhbmRsZUV2ZW50KGNvbnRleHQsIGV2ZW50KTsKKyAgICAgICAgcmVnaXN0ZXJlZExp
c3RlbmVyLmxpc3RlbmVyLT5oYW5kbGVFdmVudChjb250ZXh0LCAmZXZlbnQpOwogICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEhhbmRsZUV2ZW50KGNvb2tpZSk7CiAgICAgfQog
ICAgIGQtPmZpcmluZ0V2ZW50SXRlcmF0b3JzLT5yZW1vdmVMYXN0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5oCmluZGV4IDY4OGU2ZmY3MGI5MmNiNjg5M2JjOTlkZTc5MGYwNjg5ZDdhNzkyZWYu
LjcwNzc3NzQxYTdjNGZhMjcxZjAzZWFjMjNlYzc0NmZiOWM1NmEzY2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5oCkBAIC0xMjMsOCArMTIzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4mJiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbEV2ZW50
TGlzdGVuZXJzKCk7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4pOwotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0
aW9uQ29kZSYpOyAvLyBET00gQVBJCisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZl
bnQmKTsKKyAgICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQqLCBFeGNlcHRpb25Db2RlJik7IC8v
IERPTSBBUEkKICAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxl
cigpOwogCiAgICAgLy8gVXNlZCBmb3IgbGVnYWN5ICJvbkV2ZW50IiBhdHRyaWJ1dGUgQVBJcy4K
QEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNDYXB0dXJpbmdFdmVudExp
c3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAgICAgY29uc3QgRXZlbnRM
aXN0ZW5lclZlY3RvciYgZ2V0RXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUpOwogCi0gICAgYm9vbCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQqKTsKKyAgICBib29s
IGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYpOwogICAgIGJvb2wgaXNGaXJpbmdFdmVudExpc3Rl
bmVycygpOwogCiAgICAgdm9pZCB2aXNpdEpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpTbG90VmlzaXRv
ciYpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2
ZW50VGFyZ2V0KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgPSAw
OwogICAgIAotICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiwgRXZlbnRUYXJnZXRE
YXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYpOworICAgIHZvaWQgZmlyZUV2ZW50TGlzdGVuZXJz
KEV2ZW50JiwgRXZlbnRUYXJnZXREYXRhKiwgRXZlbnRMaXN0ZW5lclZlY3RvciYpOwogCiAgICAg
ZnJpZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0dlbmVyaWNFdmVudFF1ZXVlLmNwcAppbmRleCA3MmRkMGZlZWQwMmFlMmRjN2M5ZjNmZDZjZDdj
ZGE5OTMxNmMzOTJhLi5kYmE4NTI3MGRiNDc5NGY2ZmFiMjNhMjZiMzlmMWNiNTk0YjFkZDJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9HZW5lcmljRXZlbnRRdWV1ZS5jcHAKQEAgLTEwMCw3ICsxMDAs
NyBAQCB2b2lkIEdlbmVyaWNFdmVudFF1ZXVlOjpkaXNwYXRjaE9uZUV2ZW50KCkKICAgICBSZWY8
RXZlbnRUYXJnZXQ+IHByb3RlY3QobV9vd25lcik7CiAgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9
IG1fcGVuZGluZ0V2ZW50cy50YWtlRmlyc3QoKTsKICAgICBFdmVudFRhcmdldCYgdGFyZ2V0ID0g
ZXZlbnQtPnRhcmdldCgpID8gKmV2ZW50LT50YXJnZXQoKSA6IG1fb3duZXI7Ci0gICAgdGFyZ2V0
LmRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKKyAgICB0YXJnZXQuZGlzcGF0Y2hFdmVu
dCgqZXZlbnQpOwogfQogCiB2b2lkIEdlbmVyaWNFdmVudFF1ZXVlOjpjbG9zZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCBjMzI1Njg0NGY0ODQ1OGU5YmM3NDdjYzBlOWQ5ZDM3
NTA3OGQ4ZWIwLi5hM2FiODk2YmY1M2NmOGEwN2RlNWU5MmZlOTY3NzQ5M2E2Zjk0M2YyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTE2MCw5ICsxNjAsOCBAQCB2b2lkIE1lc3Nh
Z2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPSBNZXNzYWdlUG9ydDo6
ZW50YW5nbGVQb3J0cygqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXVEY6Om1vdmUoY2hhbm5l
bHMpKTsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShX
VEY6Om1vdmUocG9ydHMpLCBtZXNzYWdlLnJlbGVhc2UoKSk7Ci0KLSAgICAgICAgZGlzcGF0Y2hF
dmVudChldnQucmVsZWFzZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgUmVmPEV2
ZW50PiBldmVudCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFdURjo6bW92ZShwb3J0cyksIG1lc3Nh
Z2UucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKaW5kZXggMzg3Y2FlYjBmNTNiYzEyYjg0OTYzMDBmOWI4MzhlN2JhOWJi
Mjk3NC4uMDhmYTAyNDZhNTMzYTUyODJlMzQ2Y2FlMTY0YWIyZWI0YTUwYTU4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcApAQCAtMjA5MCwxOSArMjA5MCwxOSBAQCB2b2lkIE5vZGU6OmhhbmRsZUxvY2FsRXZl
bnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoaXM8RWxlbWVudD4oKnRoaXMpICYmIGRvd25jYXN0
PEVsZW1lbnQ+KCp0aGlzKS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAmJiBldmVudC5pc01vdXNl
RXZlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmlyZUV2ZW50TGlzdGVuZXJzKCZldmVu
dCk7CisgICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIH0KIAotdm9pZCBOb2RlOjpkaXNw
YXRjaFNjb3BlZEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBOb2RlOjpkaXNw
YXRjaFNjb3BlZEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoU2NvcGVkRXZlbnQoKnRoaXMsIGV2ZW50KTsKIH0KIAotYm9vbCBOb2RlOjpkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBOb2RlOjpkaXNwYXRjaEV2ZW50
KEV2ZW50JiBldmVudCkKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0o
SU9TKQotICAgIGlmIChpczxUb3VjaEV2ZW50PigqZXZlbnQpKQotICAgICAgICByZXR1cm4gZGlz
cGF0Y2hUb3VjaEV2ZW50KGFkb3B0UmVmKGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50LmxlYWtS
ZWYoKSkpKTsKKyAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpKQorICAgICAgICByZXR1cm4g
ZGlzcGF0Y2hUb3VjaEV2ZW50KGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KSk7CiAjZW5kaWYK
ICAgICByZXR1cm4gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KHRoaXMsIGV2ZW50KTsK
IH0KQEAgLTIxMjYsMjQgKzIxMjYsMjQgQEAgdm9pZCBOb2RlOjpkaXNwYXRjaFN1YnRyZWVNb2Rp
ZmllZEV2ZW50KCkKIGJvb2wgTm9kZTo6ZGlzcGF0Y2hET01BY3RpdmF0ZUV2ZW50KGludCBkZXRh
aWwsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCkKIHsKICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTighTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50
RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgUmVmUHRyPFVJRXZlbnQ+IGV2ZW50ID0gVUlFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50LCB0cnVlLCB0cnVlLCBkb2N1
bWVudCgpLmRlZmF1bHRWaWV3KCksIGRldGFpbCk7CisgICAgUmVmPFVJRXZlbnQ+IGV2ZW50ID0g
VUlFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50LCB0cnVlLCB0cnVl
LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIGRldGFpbCk7CiAgICAgZXZlbnQtPnNldFVuZGVy
bHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQpOwogICAgIGRpc3BhdGNoU2NvcGVkRXZlbnQoZXZl
bnQpOwogICAgIHJldHVybiBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKTsKIH0KIAogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpICYmICFQTEFURk9STShJT1MpCi1ib29sIE5vZGU6OmRpc3BhdGNoVG91
Y2hFdmVudChQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+IGV2ZW50KQorYm9vbCBOb2RlOjpkaXNwYXRj
aFRvdWNoRXZlbnQoVG91Y2hFdmVudCYgZXZlbnQpCiB7CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVudCk7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShJTkRJRV9VSSkKLWJvb2wgTm9kZTo6ZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChQYXNzUmVmUHRy
PFVJUmVxdWVzdEV2ZW50PiBldmVudCkKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hVSVJlcXVlc3RFdmVu
dChVSVJlcXVlc3RFdmVudCYgZXZlbnQpCiB7CiAgICAgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aEV2ZW50KHRoaXMsIGV2ZW50KTsKLSAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkg
fHwgZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4gZXZlbnQuZGVmYXVsdEhh
bmRsZWQoKSB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAjZW5kaWYKICAgICAKQEAg
LTIxNTMsOCArMjE1Myw4IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgUmVmPE5v
ZGU+IHByb3RlY3QoKnRoaXMpOwotICAgIFJlZlB0cjxCZWZvcmVMb2FkRXZlbnQ+IGJlZm9yZUxv
YWRFdmVudCA9IEJlZm9yZUxvYWRFdmVudDo6Y3JlYXRlKHNvdXJjZVVSTCk7Ci0gICAgZGlzcGF0
Y2hFdmVudChiZWZvcmVMb2FkRXZlbnQuZ2V0KCkpOworICAgIFJlZjxCZWZvcmVMb2FkRXZlbnQ+
IGJlZm9yZUxvYWRFdmVudCA9IEJlZm9yZUxvYWRFdmVudDo6Y3JlYXRlKHNvdXJjZVVSTCk7Cisg
ICAgZGlzcGF0Y2hFdmVudChiZWZvcmVMb2FkRXZlbnQpOwogICAgIHJldHVybiAhYmVmb3JlTG9h
ZEV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGVmZjA4NmE1
YmVlMmUwYmY4NWI3N2FjODdlYmMyMWE1MDc1M2FiZDcuLjdiNThmNGY4ZDIzYThkYTIxOWY4Yzk0
ZjgzZmI3OWFjNWE0OTIyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNTE5LDkgKzUxOSw5IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSkgb3ZlcnJpZGU7
CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJv
b2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZGlzcGF0
Y2hTY29wZWRFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBkaXNwYXRjaFNjb3Bl
ZEV2ZW50KEV2ZW50Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZl
bnQmKTsKIApAQCAtNTMzLDEwICs1MzMsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIGJvb2wgZGlzcGF0Y2hUb3Vj
aEV2ZW50KFBhc3NSZWZQdHI8VG91Y2hFdmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hUb3VjaEV2
ZW50KFRvdWNoRXZlbnQmKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTkRJRV9VSSkKLSAgICBib29s
IGRpc3BhdGNoVUlSZXF1ZXN0RXZlbnQoUGFzc1JlZlB0cjxVSVJlcXVlc3RFdmVudD4pOworICAg
IGJvb2wgZGlzcGF0Y2hVSVJlcXVlc3RFdmVudChVSVJlcXVlc3RFdmVudCYpOwogI2VuZGlmCiAK
ICAgICBib29sIGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJM
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcAppbmRleCAyMGYxOGNkNGMy
Y2I4NzJlNjc2ZGM3MTUzNjc1ZjVlOWViODQ2ZjM5Li45MzUwMTMyMzQ4NGEzNTQ0MzhmNDFkYTFi
Mzk3MDAzYWE5ZDk3YTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZl
bnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuY3Bw
CkBAIC00MywyNyArNDMsMjcgQEAgU2NvcGVkRXZlbnRRdWV1ZSYgU2NvcGVkRXZlbnRRdWV1ZTo6
c2luZ2xldG9uKCkKICAgICByZXR1cm4gc2NvcGVkRXZlbnRRdWV1ZTsKIH0KIAotdm9pZCBTY29w
ZWRFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lk
IFNjb3BlZEV2ZW50UXVldWU6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAg
ICAgaWYgKG1fc2NvcGluZ0xldmVsKQotICAgICAgICBtX3F1ZXVlZEV2ZW50cy5hcHBlbmQoZXZl
bnQpOworICAgICAgICBtX3F1ZXVlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3ZlKGV2ZW50KSk7CiAg
ICAgZWxzZQogICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAotdm9pZCBTY29wZWRF
dmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KSBjb25zdAor
dm9pZCBTY29wZWRFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpKTsKKyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0
KCkpOwogICAgIC8vIFN0b3JlIHRoZSB0YXJnZXQgaW4gYSBsb2NhbCB2YXJpYWJsZSB0byBhdm9p
ZCBwb3NzaWJseSBkZXJlZmVyZW5jaW5nIGEgbnVsbGlmaWVkIFBhc3NSZWZQdHIgYWZ0ZXIgaXQn
cyBwYXNzZWQgb24uCi0gICAgTm9kZSogbm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7
CisgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldCgpLT50b05vZGUoKTsKICAgICBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQobm9kZSwgZXZlbnQpOwogfQogCiB2b2lkIFNjb3BlZEV2
ZW50UXVldWU6OmRpc3BhdGNoQWxsRXZlbnRzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50
Pj4gcXVldWVkRXZlbnRzID0gV1RGOjptb3ZlKG1fcXVldWVkRXZlbnRzKTsKKyAgICBWZWN0b3I8
UmVmPEV2ZW50Pj4gcXVldWVkRXZlbnRzID0gV1RGOjptb3ZlKG1fcXVldWVkRXZlbnRzKTsKICAg
ICBmb3IgKGF1dG8mIHF1ZXVlZEV2ZW50IDogcXVldWVkRXZlbnRzKQotICAgICAgICBkaXNwYXRj
aEV2ZW50KHF1ZXVlZEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQocXVl
dWVkRXZlbnQpOwogfQogCiB2b2lkIFNjb3BlZEV2ZW50UXVldWU6OmluY3JlbWVudFNjb3BpbmdM
ZXZlbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuaAppbmRleCBjZjZiMjljOGQ5
OTEzN2IwNWVjNjRlNjA0N2YzNDJlNWEyN2RmY2IwLi43OGJiYzY1ZjM5YWRkMzdkNDIxYmUwNDJl
MzA5ZjliZmFiMDUxNzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZl
bnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmgKQEAg
LTQ2LDE4ICs0NiwxOCBAQCBjbGFzcyBTY29wZWRFdmVudFF1ZXVlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTY29wZWRFdmVudFF1ZXVlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFNjb3BlZEV2ZW50UXVldWUmIHNpbmdsZXRvbigpOwotICAgIHZv
aWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVucXVldWVFdmVu
dChSZWY8RXZlbnQ+JiYpOwogCiBwcml2YXRlOgogICAgIFNjb3BlZEV2ZW50UXVldWUoKSA9IGRl
ZmF1bHQ7CiAgICAgflNjb3BlZEV2ZW50UXVldWUoKSA9IGRlbGV0ZTsKIAotICAgIHZvaWQgZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PikgY29uc3Q7CisgICAgdm9pZCBkaXNwYXRjaEV2
ZW50KEV2ZW50JikgY29uc3Q7CiAgICAgdm9pZCBkaXNwYXRjaEFsbEV2ZW50cygpOwogICAgIHZv
aWQgaW5jcmVtZW50U2NvcGluZ0xldmVsKCk7CiAgICAgdm9pZCBkZWNyZW1lbnRTY29waW5nTGV2
ZWwoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3F1ZXVlZEV2ZW50czsKKyAgICBW
ZWN0b3I8UmVmPEV2ZW50Pj4gbV9xdWV1ZWRFdmVudHM7CiAgICAgdW5zaWduZWQgbV9zY29waW5n
TGV2ZWwgeyAwIH07CiAKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxXZWJD
b3JlOjpTY29wZWRFdmVudFF1ZXVlPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcAppbmRleCA0MmY1ZTc5OTM5MmY1MWZjNzlkZGQxMTM1MzM5MmFlNDc2
YmMyZWZiLi5mMDUyZDg2ZWI1NDUwYzI3MDM4YmQ1NGNkZGQ1NmM4Yzg1ZDA5OWY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC00MDQsNyAr
NDA0LDcgQEAgYm9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaXNwYXRjaEVycm9yRXZlbnQo
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludAogCiAgICAgQVNTRVJUKCFtX2luRGlzcGF0
Y2hFcnJvckV2ZW50KTsKICAgICBtX2luRGlzcGF0Y2hFcnJvckV2ZW50ID0gdHJ1ZTsKLSAgICBS
ZWZQdHI8RXJyb3JFdmVudD4gZXJyb3JFdmVudCA9IEVycm9yRXZlbnQ6OmNyZWF0ZShtZXNzYWdl
LCBzb3VyY2VOYW1lLCBsaW5lLCBjb2x1bW4pOworICAgIFJlZjxFcnJvckV2ZW50PiBlcnJvckV2
ZW50ID0gRXJyb3JFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsIHNvdXJjZU5hbWUsIGxpbmUsIGNvbHVt
bik7CiAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGVycm9yRXZlbnQpOwogICAgIG1faW5EaXNw
YXRjaEVycm9yRXZlbnQgPSBmYWxzZTsKICAgICByZXR1cm4gZXJyb3JFdmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAKaW5kZXggNjg5Mzc3MGVlMDFkNmRiNWZhOTZlMTJhNDcwMzExMTZk
YzNiMzk3ZS4uYjcxZjk3M2U3ZTMwMWJlZDA0MTc3YWI3NmFhYWIwYTMxZTZjNTdmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
Y3BwCkBAIC02ODIsMTAgKzY4MiwxMCBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlYwogICAgIGlm
IChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKICAgICAgICAgdmlldy0+ZGlzYWJs
ZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigpOwogCi0gICAg
UmVmUHRyPFRleHRFdmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZUZvckRpY3RhdGlvbiht
X2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2
ZXMpOworICAgIFJlZjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0
YXRpb24obV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgZGljdGF0aW9uQWx0
ZXJuYXRpdmVzKTsKICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHRyaWdnZXJpbmdFdmVu
dCk7CiAKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04p
OworICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT5k
ZWZhdWx0SGFuZGxlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYWY1
Mjg2ZGM5MWVhZmVlYWEwYWFiNmE5NjVmNDZmN2M5ODI1MGRlYy4uY2YxYmUyYWJlNjRmYTc0NmFl
NmIxMDViNDY0MTc4MGI3NDUwZTUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAt
NDYxLDcgKzQ2MSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0KGNvbnN0IFN0cmlu
ZyYgcGFzdGluZ1RleHQsIGJvb2wgc21hcnRSZXBsYWNlKQogICAgIE5vZGUqIHRhcmdldCA9IGZp
bmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAg
cmV0dXJuOwotICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvclBs
YWluVGV4dFBhc3RlKGRvY3VtZW50KCkuZG9tV2luZG93KCksIHBhc3RpbmdUZXh0LCBzbWFydFJl
cGxhY2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoVGV4
dEV2ZW50OjpjcmVhdGVGb3JQbGFpblRleHRQYXN0ZShkb2N1bWVudCgpLmRvbVdpbmRvdygpLCBw
YXN0aW5nVGV4dCwgc21hcnRSZXBsYWNlKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzRnJh
Z21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBwYXN0aW5nRnJhZ21lbnQsIGJvb2wg
c21hcnRSZXBsYWNlLCBib29sIG1hdGNoU3R5bGUsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgcmVz
cGVjdHNNYWlsQmxvY2txdW90ZSkKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEVkaXRvcjo6cGFz
dGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcGFzdGluZ0ZyYWdtZW50
LCBib29sCiAgICAgTm9kZSogdGFyZ2V0ID0gZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigp
OwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47Ci0gICAgdGFyZ2V0LT5kaXNwYXRj
aEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yRnJhZ21lbnRQYXN0ZShkb2N1bWVudCgpLmRvbVdp
bmRvdygpLCBwYXN0aW5nRnJhZ21lbnQsIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHlsZSwgcmVzcGVj
dHNNYWlsQmxvY2txdW90ZSksIElHTk9SRV9FWENFUFRJT04pOworICAgIHRhcmdldC0+ZGlzcGF0
Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckZyYWdtZW50UGFzdGUoZG9jdW1lbnQoKS5kb21X
aW5kb3coKSwgcGFzdGluZ0ZyYWdtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUsIHJlc3Bl
Y3RzTWFpbEJsb2NrcXVvdGUpKTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHRC
eXBhc3NpbmdESFRNTCgpCkBAIC04NTEsOCArODUxLDggQEAgYm9vbCBFZGl0b3I6OmRpc3BhdGNo
Q1BQRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERhdGFUcmFuc2ZlckFjY2Vz
c1AKIAogICAgIFJlZlB0cjxEYXRhVHJhbnNmZXI+IGRhdGFUcmFuc2ZlciA9IERhdGFUcmFuc2Zl
cjo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKHBvbGljeSk7CiAKLSAgICBSZWZQdHI8RXZlbnQ+IGV2
ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHRydWUsIHRydWUsIGRhdGFU
cmFuc2Zlcik7Ci0gICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJR05PUkVfRVhDRVBU
SU9OKTsKKyAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gQ2xpcGJvYXJkRXZlbnQ6OmNyZWF0ZShldmVu
dFR5cGUsIHRydWUsIHRydWUsIGRhdGFUcmFuc2Zlcik7CisgICAgdGFyZ2V0LT5kaXNwYXRjaEV2
ZW50KGV2ZW50KTsKICAgICBib29sIG5vRGVmYXVsdFByb2Nlc3NpbmcgPSBldmVudC0+ZGVmYXVs
dFByZXZlbnRlZCgpOwogICAgIGlmIChub0RlZmF1bHRQcm9jZXNzaW5nICYmIHBvbGljeSA9PSBE
YXRhVHJhbnNmZXJBY2Nlc3NQb2xpY3k6OldyaXRhYmxlKSB7CiAgICAgICAgIGF1dG8gcGFzdGVi
b2FyZCA9IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwpAQCAtMTAxMiw5ICsx
MDEyLDkgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRz
KFBhc3NSZWZQdHI8RWxlbWVudD4gcHJwU3RhcnRSb28KICAgICBSZWZQdHI8RWxlbWVudD4gc3Rh
cnRSb290ID0gcHJwU3RhcnRSb290OwogICAgIFJlZlB0cjxFbGVtZW50PiBlbmRSb290ID0gcHJw
RW5kUm9vdDsKICAgICBpZiAoc3RhcnRSb290KQotICAgICAgICBzdGFydFJvb3QtPmRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hh
bmdlZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgc3Rh
cnRSb290LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdEVk
aXRhYmxlQ29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgaWYgKGVuZFJv
b3QgJiYgZW5kUm9vdCAhPSBzdGFydFJvb3QpCi0gICAgICAgIGVuZFJvb3QtPmRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdl
ZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgZW5kUm9v
dC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJs
ZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiB2b2lkIEVkaXRvcjo6
YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gY21kKQpAQCAt
MTcyMCw4ICsxNzIwLDggQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgU2V0Q29tcG9zaXRpb25Nb2RlIG1vZGUpCiAgICAgLy8gV2Ugc2hvdWxkIHNlbmQg
dGhpcyBldmVudCBiZWZvcmUgc2VuZGluZyBhIFRleHRFdmVudCBhcyB3cml0dGVuIGluIFNlY3Rp
b24gNi4yLjIgYW5kIDYuMi4zIG9mCiAgICAgLy8gdGhlIERPTSBFdmVudCBzcGVjaWZpY2F0aW9u
LgogICAgIGlmIChFbGVtZW50KiB0YXJnZXQgPSBkb2N1bWVudCgpLmZvY3VzZWRFbGVtZW50KCkp
IHsKLSAgICAgICAgUmVmUHRyPENvbXBvc2l0aW9uRXZlbnQ+IGV2ZW50ID0gQ29tcG9zaXRpb25F
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbmVuZEV2ZW50LCBkb2N1bWVudCgp
LmRvbVdpbmRvdygpLCB0ZXh0KTsKLSAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50
LnJlbGVhc2UoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIFJlZjxDb21wb3NpdGlvbkV2
ZW50PiBldmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcG9z
aXRpb25lbmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7CisgICAgICAgIHRh
cmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgfQogCiAgICAgLy8gSWYgdGV4dCBpcyBl
bXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJlLiAgSWYgdGV4dCBpcyBu
b24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dApAQCAtMTc5NSw4ICsxNzk1LDggQEAg
dm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW4KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBldmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcG9zaXRp
b25lbmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGV2ZW50LmdldCgpKQotICAgICAgICAgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50
KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgaWYgKGV2ZW50KQorICAgICAgICAg
ICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KCpldmVudCk7CiAgICAgfQogCiAgICAgLy8gSWYgdGV4
dCBpcyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJlLiAgSWYgdGV4
dCBpcyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1YjY4ZjU3
Y2ZhYzBiYmNhOWYxOGI0MmIxYTVhYjBiMTVmYmM4NThiLi43ODk3MmM3NTIyNmJkZjU0Y2I3NDU0
OTcyNzg3NjNkYzQ3MmEwM2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTgyLDE2ICsxODIsMTYgQEAgUmVwbGFjZW1l
bnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudCYgZG9jdW1lbnQsIERvY3Vt
ZW50RnJhZ21lbnQqIGYKICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05vZGVzVG9G
cmFnbWVudChob2xkZXIuZ2V0KCkpOwogCiAgICAgLy8gR2l2ZSB0aGUgcm9vdCBhIGNoYW5jZSB0
byBjaGFuZ2UgdGhlIHRleHQuCi0gICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBl
dnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOwotICAgIGVkaXRhYmxl
Um9vdC0+ZGlzcGF0Y2hFdmVudChldnQsIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIGlmICh0
ZXh0ICE9IGV2dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhhc1JpY2hseUVkaXRhYmxlU3R5
bGUoKSkgeworICAgIFJlZjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOworICAgIGVkaXRhYmxlUm9vdC0+ZGlzcGF0
Y2hFdmVudChldmVudCk7CisgICAgaWYgKHRleHQgIT0gZXZlbnQtPnRleHQoKSB8fCAhZWRpdGFi
bGVSb290LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgcmVzdG9yZUFuZFJl
bW92ZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsKIAogICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9mcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldnQtPnRleHQoKSk7CisgICAg
ICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgZXZlbnQtPnRl
eHQoKSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJbnNl
cnRpb25CYXNlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJbnNlcnRp
b25CYXNlQ29tbWFuZC5jcHAKaW5kZXggZmQ3MjE5ZDYwYTNhOGZmYTY2NmUwMTVlNWRhMTA1MmIy
NmNjMWM1Yy4uY2NjM2RkZWFlMmU3ZTg1NmJmZDIzODNmZmVlZDUxMGMxNTQ3OGI3YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNw
cApAQCAtNjMsOSArNjMsOSBAQCBTdHJpbmcgZGlzcGF0Y2hCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgIGlmIChOb2Rl
KiBzdGFydE5vZGUgPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uc3RhcnQoKS5jb250YWluZXJOb2Rl
KCkpIHsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7CiAg
ICAgICAgICAgICAvLyBTZW5kIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LiBUaGUgZXZlbnQgaGFu
ZGxlciB3aWxsIHVwZGF0ZSB0ZXh0IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIFJlZlB0cjxC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZ0ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNy
ZWF0ZSh0ZXh0KTsKLSAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
LT5kaXNwYXRjaEV2ZW50KGV2dCwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICBuZXdU
ZXh0ID0gZXZ0LT50ZXh0KCk7CisgICAgICAgICAgICBSZWY8QmVmb3JlVGV4dEluc2VydGVkRXZl
bnQ+IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZSh0ZXh0KTsKKyAgICAg
ICAgICAgIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5kaXNwYXRjaEV2ZW50KGV2
ZW50KTsKKyAgICAgICAgICAgIG5ld1RleHQgPSBldmVudC0+dGV4dCgpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBuZXdUZXh0OwpAQCAtNzcsOCArNzcsOCBAQCBib29sIGNhbkFwcGVu
ZE5ld0xpbmVGZWVkVG9TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlZlB0
cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dDo6Y3JlYXRlKFN0cmluZygiXG4iKSk7Ci0gICAgbm9kZS0+ZGlzcGF0Y2hFdmVudChldmVudCwg
SUdOT1JFX0VYQ0VQVElPTik7CisgICAgUmVmPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldmVu
dCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUoU3RyaW5nKCJcbiIpKTsKKyAgICBu
b2RlLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPnRleHQoKS5sZW5n
dGgoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXgg
OTU3YTk3ZWFhMjQzNzg0Y2JmNTMyOGNkZWU3MTMwZjg0NjZlMmQ4YS4uMGFkNjFmMzdlYzIxY2I0
MWE4MTI2ZWUzNDYzNDI2NTA2NmFkMmQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC01MTIwLDEwICs1MTIwLDkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjptZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3NDaGFuZ2VkKE1lZGlh
UGwKICAgICB1cGRhdGVNZWRpYVN0YXRlKFVwZGF0ZU1lZGlhU3RhdGU6OkFzeW5jaHJvbm91c2x5
KTsKIH0KIAotYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IHBycEV2ZW50KQorYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRjaEV2ZW50KEV2
ZW50JiBldmVudCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7Ci0gICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3Rh
cmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3aXJlbGVzc2NoYW5nZWRFdmVu
dCkKICAgICAgICAgc2NoZWR1bGVEZWxheWVkQWN0aW9uKENoZWNrUGxheWJhY2tUYXJnZXRDb21w
YXRhYmxpdHkpOwogICAgIHJldHVybiBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hFdmVudChldmVudCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDA1MGFjYjQ2MDcx
YTRmZWM1NGFmMWM2ZmU3ZjMxZjBhZTE5ODA1OTMuLmEwM2YyYzRmYzZmZGVmNmYyZWE3ZjJmNGUz
ZTA4NTY1YWVlZmZiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBA
IC01NjQsNyArNTY0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVucXVldWVQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVudCgpOwogCiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRp
c3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikg
b3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKaW5kZXggZDZiMWY5YTZlYjRkNzJkOTllMGFk
OTFiODUyNGI5ZDRmOGM0NTE0NS4uYjNlYjNiODA0ZWRiNDNjNWU3OGI4ZTRjZGU3MTljZTBjYmRl
MmM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCkBAIC0yNjAs
NyArMjYwLDcgQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpkaWRDb21wbGV0ZUxvYWQoTG9hZFN0
YXR1cyBzdGF0dXMpCiAKICAgICBpZiAoc3RhdHVzID09IEZhaWx1cmUpIHsKICAgICAgICAgc2V0
UmVhZHlTdGF0ZShIVE1MVHJhY2tFbGVtZW50OjpUUkFDS19FUlJPUik7Ci0gICAgICAgIGRpc3Bh
dGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZh
bHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6
OmRpZENvbXBsZXRlTG9hZChMb2FkU3RhdHVzIHN0YXR1cykKIAogICAgIC8vICAgICAyLiBJZiB0
aGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCwgZmlyZSBhIHNpbXBsZSBldmVudCBu
YW1lZCBsb2FkIGF0IHRoZSAKICAgICAvLyAgICAgICAgdHJhY2sgZWxlbWVudC4KLSAgICBkaXNw
YXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZh
bHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiAvLyBOT1RFOiBU
aGUgdmFsdWVzIGluIHRoZSBUZXh0VHJhY2s6OlJlYWRpbmVzc1N0YXRlIGVudW0gbXVzdCBzdGF5
IGluIHN5bmMgd2l0aCB0aG9zZSBpbiBIVE1MVHJhY2tFbGVtZW50OjpSZWFkeVN0YXRlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCmluZGV4IDk2MzcyNDQ2NzY4NzQwNGVk
NjJlZTM3ZDAxNGVmNGQ2NTMzNzA3MjEuLmRiYjAyYWI5ZTk0OTEyMTk0NmEwMGViYWQ3M2ExODIw
YzdmMTZiMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5jcHAKQEAgLTU0
NCwxMSArNTQ0LDExIEBAIHZvaWQgTWVkaWFDb250cm9sbGVyOjpzY2hlZHVsZUV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnROYW1lKQogCiB2b2lkIE1lZGlhQ29udHJvbGxlcjo6YXN5bmNF
dmVudFRpbWVyRmlyZWQoKQogewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBwZW5kaW5nRXZl
bnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBwZW5kaW5nRXZlbnRzOwogCiAgICAgbV9wZW5k
aW5nRXZlbnRzLnN3YXAocGVuZGluZ0V2ZW50cyk7CiAgICAgZm9yIChhdXRvJiBwZW5kaW5nRXZl
bnQgOiBwZW5kaW5nRXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRpbmdFdmVudC5y
ZWxlYXNlKCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRp
bmdFdmVudCk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sbGVyOjpjbGVhclBvc2l0aW9uVGltZXJG
aXJlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaAppbmRleCA3NTMzYjQ4YzI3
OGY1ZDYxYzVmNmUwMjJjZTc0YzM2MTg1Njg0MmJjLi4zMTVlZWNkMTkxYTNjNjc5YTEyMjBjYzBm
NmQ5YjgzY2QwZjI1MmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmgKQEAg
LTE0NSw3ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tdXRlZDsKICAgICBSZWFkeVN0
YXRlIG1fcmVhZHlTdGF0ZTsKICAgICBQbGF5YmFja1N0YXRlIG1fcGxheWJhY2tTdGF0ZTsKLSAg
ICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9wZW5kaW5nRXZlbnRzOworICAgIFZlY3RvcjxSZWY8
RXZlbnQ+PiBtX3BlbmRpbmdFdmVudHM7CiAgICAgVGltZXIgbV9hc3luY0V2ZW50VGltZXI7CiAg
ICAgbXV0YWJsZSBUaW1lciBtX2NsZWFyUG9zaXRpb25UaW1lcjsKICAgICBTdHJpbmcgbV9tZWRp
YUdyb3VwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCAzMzBjOTUwNGIwNzY5ZDk0MDcyMzE3ZGRkMjk5
M2QyOThiOWY5YWRjLi5lZDMwNDlkMzg2NjY0OTQ1ZTA5OWQ2NjNkYTgyOWRiNjU5MjM4ZDA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcApAQCAtNDc2Niw3ICs0NzY2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigp
CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2
ZW50KCkKIHsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250
ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIiIpOworICAgIFJlZjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENv
bnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZh
bHNlLCB0cnVlLCAiIik7CiAgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAg
IG1fcmVzdG9yZUFsbG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwogICAgIGlmICht
X2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5k
ZXggZWVhMGVjNzU3NWQ3NzNjOGI0OTU1NWI4NmQ2NGI5ODAzZmVmYWNiOC4uZWRiMDYyNzJjYzgw
MTk0Nzk4YmZhMmZlZjBiNGIwNDFiYWQxYWZkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFVS
TCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAg
cmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKTsKIH0KIAotaW5saW5l
IFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpCitpbmxpbmUgUmVmPEV2
ZW50PiBjcmVhdGVTY3JpcHRMb2FkRXZlbnQoKQogewogICAgIHJldHVybiBFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKaW5kZXggYzI0NThkMjVlYTk0ODNmNGQ4NmE2
M2M1MDg2NzY1ZDVmNTYzOGUxNC4uYTZiMWRiYjg4NDRlNzMxMWM1NmE4NGI4NWIzOGQzNzcxYjEz
NjEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcApAQCAt
MTkwLDcgKzE5MCw3IEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjppbnZhbGlkYXRlQ3VlSW5kZXgoKQog
ICAgIG1fY3VlSW5kZXggPSBpbnZhbGlkQ3VlSW5kZXg7CiB9CiAKLWJvb2wgVGV4dFRyYWNrQ3Vl
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBUZXh0VHJhY2tD
dWU6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQogewogICAgIC8vIFdoZW4gYSBUZXh0VHJh
Y2sncyBtb2RlIGlzIGRpc2FibGVkOiBubyBjdWVzIGFyZSBhY3RpdmUsIG5vIGV2ZW50cyBmaXJl
ZC4KICAgICBpZiAoIXRyYWNrKCkgfHwgdHJhY2soKS0+bW9kZSgpID09IFRleHRUcmFjazo6ZGlz
YWJsZWRLZXl3b3JkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaApp
bmRleCBlYzJhYjIyZTJmNzYzZTg0MDdmYTNkMTg5ZDk2ZGJjMGU4ZDZjYjgyLi42NGU2ZmQyNTBi
Y2YxYjM5OWRjMjMzZTNmNDEyMWVkYTg4Y2E1ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW52
YWxpZGF0ZUN1ZUluZGV4KCk7CiAKICAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVu
dDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBvdmVycmlkZTsK
IAogICAgIGJvb2wgaXNBY3RpdmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY3RpdmUoYm9v
bCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA3ODRiM2EzZTQwYmRm
MmFhMDJhMjU1ZWI4ZWNkMjk4Y2M1MDRhMGU0Li4xYmFlNGEyNDA1OTEyNTEwZThjMjczOTczMjkz
YTA5NDRjYTAxMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTI4
NTksNyArMjg1OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpc3BhdGNoVW5sb2FkRXZlbnRzKFVu
bG9hZEV2ZW50UG9saWN5IHVubG9hZEV2ZW50UG9saWN5KQogICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjc3MAogCiAgICAgICAgICAgICBp
ZiAoIW1fZnJhbWUuZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkgewotICAgICAgICAgICAgICAg
IFJlZlB0cjxFdmVudD4gdW5sb2FkRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5s
b2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIFJlZjxFdmVudD4gdW5s
b2FkRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIGZhbHNlLCBm
YWxzZSkpOwogICAgICAgICAgICAgICAgIC8vIFRoZSBEb2N1bWVudExvYWRlciAoYW5kIHRodXMg
aXRzIERvY3VtZW50TG9hZFRpbWluZykgbWlnaHQgZ2V0IGRlc3Ryb3llZAogICAgICAgICAgICAg
ICAgIC8vIHdoaWxlIGRpc3BhdGNoaW5nIHRoZSBldmVudCwgc28gcHJvdGVjdCBpdCB0byBwcmV2
ZW50IHdyaXRpbmcgdGhlIGVuZAogICAgICAgICAgICAgICAgIC8vIHRpbWUgaW50byBmcmVlZCBt
ZW1vcnkuCkBAIC0yOTA1LDE4ICsyOTA1LDE4IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmRpc3BhdGNo
QmVmb3JlVW5sb2FkRXZlbnQoQ2hyb21lJiBjaHJvbWUsIEZyYW1lTG9hZGVyKiBmcmFtZUxvCiAg
ICAgaWYgKCFkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgCi0gICAgUmVmUHRyPEJlZm9yZVVubG9hZEV2ZW50PiBiZWZvcmVVbmxvYWRFdmVudCA9
IEJlZm9yZVVubG9hZEV2ZW50OjpjcmVhdGUoKTsKKyAgICBSZWY8QmVmb3JlVW5sb2FkRXZlbnQ+
IGJlZm9yZVVubG9hZEV2ZW50ID0gQmVmb3JlVW5sb2FkRXZlbnQ6OmNyZWF0ZSgpOwogICAgIG1f
cGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gUGFnZURpc21pc3NhbFR5cGU6OkJl
Zm9yZVVubG9hZDsKIAogICAgIHsKICAgICAgICAgRm9yYmlkUHJvbXB0c1Njb3BlIGZvcmJpZFBy
b21wdHMobV9mcmFtZS5wYWdlKCkpOwotICAgICAgICBkb21XaW5kb3ctPmRpc3BhdGNoRXZlbnQo
YmVmb3JlVW5sb2FkRXZlbnQuZ2V0KCksIGRvbVdpbmRvdy0+ZG9jdW1lbnQoKSk7CisgICAgICAg
IGRvbVdpbmRvdy0+ZGlzcGF0Y2hFdmVudChiZWZvcmVVbmxvYWRFdmVudCwgZG9tV2luZG93LT5k
b2N1bWVudCgpKTsKICAgICB9CiAKICAgICBtX3BhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0
Y2hlZCA9IFBhZ2VEaXNtaXNzYWxUeXBlOjpOb25lOwogCiAgICAgaWYgKCFiZWZvcmVVbmxvYWRF
dmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpKQotICAgICAgICBkb2N1bWVudC0+ZGVmYXVsdEV2ZW50
SGFuZGxlcihiZWZvcmVVbmxvYWRFdmVudC5nZXQoKSk7CisgICAgICAgIGRvY3VtZW50LT5kZWZh
dWx0RXZlbnRIYW5kbGVyKGJlZm9yZVVubG9hZEV2ZW50LnB0cigpKTsKICAgICBpZiAoYmVmb3Jl
VW5sb2FkRXZlbnQtPnJldHVyblZhbHVlKCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVIb3N0LmNwcAppbmRleCA5ODkwOTk0MGUzNDRmM2IyODZiMjBjYjUxYWQxMjA4MDZm
MjIzZDIzLi44OGU3ZWUyYjI1MzFkZmY3MTc2MWYyYzVlNzBjZTQ4MmU4OGJhNGU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
SG9zdC5jcHAKQEAgLTM1MCw3ICszNTAsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpk
aXNwYXRjaERPTUV2ZW50KEV2ZW50SUQgaWQsIGludCB0b3RhbCwgaW50IGRvbmUpCiAgICAgICAg
ICAgICBldmVudCA9IFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIHRydWUsIGRvbmUs
IHRvdGFsKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZXZlbnQgPSBFdmVudDo6Y3JlYXRl
KGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgbV9kb21BcHBsaWNhdGlvbkNhY2hl
LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgbV9k
b21BcHBsaWNhdGlvbkNhY2hlLT5kaXNwYXRjaEV2ZW50KCpldmVudCk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggMWVmYWViNDFhNzhmMmVjYTk4ODUzZjc3MjFk
OWU4ZTVmOTQ1ZTg1OS4uZjg5ZTE5NDY4ODk0ZjM1MzAyZGQ1NWNmMDRlMzFjMGU2YzJhOTYzYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgUmVmPE1lc3NhZ2VFdmVudD4gZXZlbnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICB7CiAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxNZXNzYWdlUG9ydEFycmF5PiBtZXNzYWdlUG9ydHMgPSBNZXNzYWdlUG9ydDo6ZW50
YW5nbGVQb3J0cygqY29udGV4dCwgV1RGOjptb3ZlKG1fY2hhbm5lbHMpKTsKICAgICAgICAgcmV0
dXJuIE1lc3NhZ2VFdmVudDo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlUG9ydHMpLCBtX21lc3Nh
Z2UsIG1fb3JpZ2luLCBTdHJpbmcoKSwgbV9zb3VyY2UpOwpAQCAtOTI4LDcgKzkyOCw3IEBAIHZv
aWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZVRpbWVyRmlyZWQoUG9zdE1lc3NhZ2VUaW1lciYgdGlt
ZXIpCiAgICAgZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRoT3JpZ2luQ2hlY2sodGltZXIudGFyZ2V0
T3JpZ2luKCksIHRpbWVyLmV2ZW50KGRvY3VtZW50KCkpLCB0aW1lci5zdGFja1RyYWNlKCkpOwog
fQogCi12b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRoT3JpZ2luQ2hlY2so
U2VjdXJpdHlPcmlnaW4qIGludGVuZGVkVGFyZ2V0T3JpZ2luLCBQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IHN0YWNrVHJhY2UpCit2b2lkIERPTVdp
bmRvdzo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRoT3JpZ2luQ2hlY2soU2VjdXJpdHlPcmlnaW4q
IGludGVuZGVkVGFyZ2V0T3JpZ2luLCBFdmVudCYgZXZlbnQsIFBhc3NSZWZQdHI8U2NyaXB0Q2Fs
bFN0YWNrPiBzdGFja1RyYWNlKQogewogICAgIGlmIChpbnRlbmRlZFRhcmdldE9yaWdpbikgewog
ICAgICAgICAvLyBDaGVjayB0YXJnZXQgb3JpZ2luIG5vdyBzaW5jZSB0aGUgdGFyZ2V0IGRvY3Vt
ZW50IG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIHRpbWVyIHdhcyBzY2hlZHVsZWQuCkBAIC0x
ODcwLDcgKzE4NzAsNyBAQCBib29sIERPTVdpbmRvdzo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lcgogCiB2b2lkIERPTVdpbmRv
dzo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQogewotICAgIFJlZlB0cjxFdmVudD4gbG9hZEV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CisgICAg
UmVmPEV2ZW50PiBsb2FkRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZl
bnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+bG9hZGVyKCku
ZG9jdW1lbnRMb2FkZXIoKSAmJiAhbV9mcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+
dGltaW5nKCkubG9hZEV2ZW50U3RhcnQoKSkgewogICAgICAgICAvLyBUaGUgRG9jdW1lbnRMb2Fk
ZXIgKGFuZCB0aHVzIGl0cyBEb2N1bWVudExvYWRUaW1pbmcpIG1pZ2h0IGdldCBkZXN0cm95ZWQg
d2hpbGUgZGlzcGF0Y2hpbmcKICAgICAgICAgLy8gdGhlIGV2ZW50LCBzbyBwcm90ZWN0IGl0IHRv
IHByZXZlbnQgd3JpdGluZyB0aGUgZW5kIHRpbWUgaW50byBmcmVlZCBtZW1vcnkuCkBAIC0xODky
LDM0ICsxODkyLDMzIEBAIHZvaWQgRE9NV2luZG93OjpkaXNwYXRjaExvYWRFdmVudCgpCiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpsb2FkRXZlbnRGaXJlZChmcmFtZSgpKTsKIH0KIAot
Ym9vbCBET01XaW5kb3c6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQs
IFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFRhcmdldCkKK2Jvb2wgRE9NV2luZG93OjpkaXNw
YXRjaEV2ZW50KEV2ZW50JiBldmVudCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKIHsKICAgICBSZWY8
RXZlbnRUYXJnZXQ+IHByb3RlY3QoKnRoaXMpOwotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBw
cnBFdmVudDsKIAogICAgIC8vIFBhdXNpbmcgYSBwYWdlIG1heSB0cmlnZ2VyIHBhZ2VoaWRlIGFu
ZCBwYWdlc2hvdyBldmVudHMuIFdlYkNvcmUgYWxzbyBpbXBsaWNpdGx5IGZpcmVzIHRoZXNlCiAg
ICAgLy8gZXZlbnRzIHdoZW4gY2xvc2luZyBhIFdlYlZpZXcuIEhlcmUgd2Uga2VlcCB0cmFjayBv
ZiB0aGUgc3RhdGUgb2YgdGhlIHBhZ2UgdG8gcHJldmVudCBkdXBsaWNhdGUsCiAgICAgLy8gdW5i
YWxhbmNlZCBldmVudHMgcGVyIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBwYWdlc2hvdyBldmVudDoK
ICAgICAvLyA8aHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29y
ay9tdWx0aXBhZ2UvaGlzdG9yeS5odG1sI2V2ZW50LXBhZ2VzaG93Pi4KLSAgICBpZiAoZXZlbnQt
PmV2ZW50SW50ZXJmYWNlKCkgPT0gUGFnZVRyYW5zaXRpb25FdmVudEludGVyZmFjZVR5cGUpIHsK
LSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnBhZ2VzaG93RXZlbnQp
IHsKKyAgICBpZiAoZXZlbnQuZXZlbnRJbnRlcmZhY2UoKSA9PSBQYWdlVHJhbnNpdGlvbkV2ZW50
SW50ZXJmYWNlVHlwZSkgeworICAgICAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMo
KS5wYWdlc2hvd0V2ZW50KSB7CiAgICAgICAgICAgICBpZiAobV9sYXN0UGFnZVN0YXR1cyA9PSBQ
YWdlU3RhdHVzU2hvd24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEV2ZW50IHdh
cyBwcmV2aW91c2x5IGRpc3BhdGNoZWQ7IGRvIG5vdCBmaXJlIGEgZHVwbGljYXRlIGV2ZW50Lgog
ICAgICAgICAgICAgbV9sYXN0UGFnZVN0YXR1cyA9IFBhZ2VTdGF0dXNTaG93bjsKLSAgICAgICAg
fSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wYWdlaGlkZUV2ZW50KSB7
CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5wYWdlaGlk
ZUV2ZW50KSB7CiAgICAgICAgICAgICBpZiAobV9sYXN0UGFnZVN0YXR1cyA9PSBQYWdlU3RhdHVz
SGlkZGVuKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBFdmVudCB3YXMgcHJldmlv
dXNseSBkaXNwYXRjaGVkOyBkbyBub3QgZmlyZSBhIGR1cGxpY2F0ZSBldmVudC4KICAgICAgICAg
ICAgIG1fbGFzdFBhZ2VTdGF0dXMgPSBQYWdlU3RhdHVzSGlkZGVuOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgZXZlbnQtPnNldFRhcmdldChwcnBUYXJnZXQgPyBwcnBUYXJnZXQgOiB0aGlzKTsK
LSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKLSAgICBldmVudC0+c2V0RXZlbnRQ
aGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICBldmVudC5zZXRUYXJnZXQodGFyZ2V0ID8gdGFy
Z2V0IDogdGhpcyk7CisgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICBldmVu
dC5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwogCi0gICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERp
c3BhdGNoRXZlbnRPbldpbmRvdyhmcmFtZSgpLCAqZXZlbnQsICp0aGlzKTsKKyAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsRGlzcGF0Y2hFdmVudE9uV2luZG93KGZyYW1lKCksIGV2ZW50LCAqdGhpcyk7CiAKLSAg
ICBib29sIHJlc3VsdCA9IGZpcmVFdmVudExpc3RlbmVycyhldmVudC5nZXQoKSk7CisgICAgYm9v
bCByZXN1bHQgPSBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwogCiAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaEV2ZW50T25XaW5kb3coY29va2llKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmgKaW5kZXggMGQ4ZDk1MzVhYjc0M2Q5Mjk2NzVhNWJjNDBiMTQ0MjhiOGM1
MjdlZC4uYjUwMDFiY2YxYjcwNmZlNzBlYjQ4ZjRhNzg3MWU3MjZiMmJhMWE1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5oCkBAIC0yNDQsNyArMjQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAvLyBOZWVkZWQgZm9yIE9iamVjdGl2ZS1DIGJpbmRpbmdzIChzZWUgYnVnIDI4Nzc0
KS4KICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gbWVzc2FnZSwgTWVzc2FnZVBvcnQqLCBjb25zdCBTdHJpbmcmIHRhcmdldE9yaWdpbiwg
RE9NV2luZG93JiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdm9pZCBwb3N0TWVz
c2FnZVRpbWVyRmlyZWQoUG9zdE1lc3NhZ2VUaW1lciYpOwotICAgICAgICB2b2lkIGRpc3BhdGNo
TWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3VyaXR5T3JpZ2luKiBpbnRlbmRlZFRhcmdl
dE9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3JpcHRD
YWxsU3RhY2s+KTsKKyAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhPcmlnaW5D
aGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5kZWRUYXJnZXRPcmlnaW4sIEV2ZW50JiwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4pOwogCiAgICAgICAgIHZvaWQgc2Nyb2xs
QnkoaW50IHgsIGludCB5KSBjb25zdDsKICAgICAgICAgdm9pZCBzY3JvbGxUbyhpbnQgeCwgaW50
IHkpIGNvbnN0OwpAQCAtMjc4LDcgKzI3OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkgb3ZlcnJpZGU7CiAKICAg
ICAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgICAgIGJvb2wgZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCwgUGFzc1JlZlB0cjxFdmVudFRh
cmdldD4gcHJwVGFyZ2V0KTsKKyAgICAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50JiwgRXZl
bnRUYXJnZXQqKTsKIAogICAgICAgICB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwCmluZGV4IDkyNTc1NGVjNDM2MTBlN2E3
ZjY5OWI2ODQ4MTUyZTcyYzg1YWY2MjEuLjNjMzg0MzA5NTYzNDk2MjJhZTJlMTlmZDViNzYwMzg1
Yzk1OTA0Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcApAQCAt
NzEsOSArNzEsOCBAQCB2b2lkIERldmljZUNvbnRyb2xsZXI6OnJlbW92ZUFsbERldmljZUV2ZW50
TGlzdGVuZXJzKERPTVdpbmRvdyogd2luZG93KQogICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0
aW5nKCk7CiB9CiAKLXZvaWQgRGV2aWNlQ29udHJvbGxlcjo6ZGlzcGF0Y2hEZXZpY2VFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK3ZvaWQgRGV2aWNlQ29udHJvbGxlcjo6ZGlzcGF0
Y2hEZXZpY2VFdmVudChFdmVudCYgZXZlbnQpCiB7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9
IHBycEV2ZW50OwogICAgIFZlY3RvcjxSZWZQdHI8RE9NV2luZG93Pj4gbGlzdGVuZXJWZWN0b3I7
CiAgICAgY29weVRvVmVjdG9yKG1fbGlzdGVuZXJzLCBsaXN0ZW5lclZlY3Rvcik7CiAgICAgZm9y
IChhdXRvJiBsaXN0ZW5lciA6IGxpc3RlbmVyVmVjdG9yKSB7CkBAIC05Myw4ICs5MiwxMCBAQCB2
b2lkIERldmljZUNvbnRyb2xsZXI6OmZpcmVEZXZpY2VFdmVudCgpCiAgICAgbV9sYXN0RXZlbnRM
aXN0ZW5lcnMuY2xlYXIoKTsKICAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogbGlzdGVuZXJWZWN0
b3IpIHsKICAgICAgICAgYXV0byBkb2N1bWVudCA9IGxpc3RlbmVyLT5kb2N1bWVudCgpOwotICAg
ICAgICBpZiAoZG9jdW1lbnQgJiYgIWRvY3VtZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3VzcGVu
ZGVkKCkgJiYgIWRvY3VtZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpKQotICAgICAg
ICAgICAgbGlzdGVuZXItPmRpc3BhdGNoRXZlbnQoZ2V0TGFzdEV2ZW50KCkpOworICAgICAgICBp
ZiAoZG9jdW1lbnQgJiYgIWRvY3VtZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkg
JiYgIWRvY3VtZW50LT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBsYXN0RXZlbnQgPSBnZXRMYXN0RXZlbnQoKSkKKyAgICAgICAgICAgICAgICBs
aXN0ZW5lci0+ZGlzcGF0Y2hFdmVudCgqbGFzdEV2ZW50KTsKKyAgICAgICAgfQogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuaAppbmRleCBmZGY1ZDFkOTZkMTU3
NzY3NmNhOTA5ZjkxODkzYzU3Zjk4MDhhNWNmLi4yMTg2MWYyNGU1ZTQzOGU3MDAyZDc5ZjEyM2U2
OGJjYjliYTA4ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRy
b2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuaApAQCAt
NDgsMTIgKzQ4LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZURldmljZUV2ZW50TGlzdGVu
ZXIoRE9NV2luZG93Kik7CiAgICAgdm9pZCByZW1vdmVBbGxEZXZpY2VFdmVudExpc3RlbmVycyhE
T01XaW5kb3cqKTsKIAotICAgIHZvaWQgZGlzcGF0Y2hEZXZpY2VFdmVudChQYXNzUmVmUHRyPEV2
ZW50Pik7CisgICAgdm9pZCBkaXNwYXRjaERldmljZUV2ZW50KEV2ZW50Jik7CiAgICAgYm9vbCBp
c0FjdGl2ZSgpIHsgcmV0dXJuICFtX2xpc3RlbmVycy5pc0VtcHR5KCk7IH0KICAgICBEZXZpY2VD
bGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
aGFzTGFzdERhdGEoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxF
dmVudD4gZ2V0TGFzdEV2ZW50KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUmVmUHRyPEV2
ZW50PiBnZXRMYXN0RXZlbnQoKSB7IHJldHVybiBudWxscHRyOyB9CiAKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGZpcmVEZXZpY2VFdmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmNwcAppbmRleCAwNTBiNjI4OTVhZWE3MzY0OWQyYWU0NjRlNTlmYzY4M2YxYTZiOWQwLi5kYWEw
Zjk4ZjljMGEyNTY2ZTEwODllNTBkOWRkNTYwYjhlZGY3N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RyYWdDb250cm9sbGVyLmNwcApAQCAtNDQ2LDcgKzQ0Niw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqIGlubmVyRnJhbWUsIERyYWdEYXRh
JiBkcmFnCiAgICAgQVNTRVJUKG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuaGFzQ2FyZXQo
KSk7CiAgICAgU3RyaW5nIHRleHQgPSBtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKCkgPyBlbXB0eVN0cmluZygpIDogZHJhZ0RhdGEuYXNQbGFpblRl
eHQoKTsKICAgICBOb2RlKiB0YXJnZXQgPSBpbm5lckZyYW1lLT5lZGl0b3IoKS5maW5kRXZlbnRU
YXJnZXRGcm9tKG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigpKTsK
LSAgICByZXR1cm4gdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yRHJv
cChpbm5lckZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCksIElHTk9SRV9FWENF
UFRJT04pOworICAgIHJldHVybiB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVh
dGVGb3JEcm9wKGlubmVyRnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0KSk7CiB9
CiAKIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHJhZ0RhdGEmIGRyYWdE
YXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDY3MGUxMzVmM2QzNGZk
MzM2NmQzODhhNmU5MDA2Yzc1YzFlZDRmYTMuLmJmOGZiYTc1NjEwYmNjMTUzZjM2MGIyYmNjZWM4
NzJhY2UxNjI0MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTMwMTIs
MTMgKzMwMTIsMTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudCYgaW5pdGlhbEtleUV2ZW50KQogICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCBrZXlEb3duRXZlbnQgPSBpbml0aWFsS2V5RXZlbnQ7ICAgIAogICAgIGlmIChrZXlEb3duRXZl
bnQudHlwZSgpICE9IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pCiAgICAgICAgIGtleURvd25F
dmVudC5kaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1FdmVudDo6UmF3S2V5RG93biwg
YmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSk7Ci0gICAgUmVmUHRyPEtleWJvYXJkRXZlbnQ+IGtl
eWRvd24gPSBLZXlib2FyZEV2ZW50OjpjcmVhdGUoa2V5RG93bkV2ZW50LCBtX2ZyYW1lLmRvY3Vt
ZW50KCktPmRlZmF1bHRWaWV3KCkpOworICAgIFJlZjxLZXlib2FyZEV2ZW50PiBrZXlkb3duID0g
S2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleURvd25FdmVudCwgbV9mcmFtZS5kb2N1bWVudCgpLT5k
ZWZhdWx0VmlldygpKTsKICAgICBpZiAobWF0Y2hlZEFuQWNjZXNzS2V5KQogICAgICAgICBrZXlk
b3duLT5zZXREZWZhdWx0UHJldmVudGVkKHRydWUpOwogICAgIGtleWRvd24tPnNldFRhcmdldChl
bGVtZW50KTsKIAogICAgIGlmIChpbml0aWFsS2V5RXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZl
bnQ6OlJhd0tleURvd24pIHsKLSAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChrZXlkb3du
LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChrZXlk
b3duKTsKICAgICAgICAgLy8gSWYgZnJhbWUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiBrZXlkb3du
IGRpc3BhdGNoLCB0aGVuIHJldHVybiB0cnVlIHRvIGF2b2lkIHNlbmRpbmcgYSBzdWJzZXF1ZW50
IGtleXByZXNzIG1lc3NhZ2UgdG8gdGhlIG5ldyBmcmFtZS4KICAgICAgICAgYm9vbCBjaGFuZ2Vk
Rm9jdXNlZEZyYW1lID0gbV9mcmFtZS5wYWdlKCkgJiYgJm1fZnJhbWUgIT0gJm1fZnJhbWUucGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICAgICAgcmV0
dXJuIGtleWRvd24tPmRlZmF1bHRIYW5kbGVkKCkgfHwga2V5ZG93bi0+ZGVmYXVsdFByZXZlbnRl
ZCgpIHx8IGNoYW5nZWRGb2N1c2VkRnJhbWU7CkBAIC0zMDI5LDcgKzMwMjksNyBAQCBib29sIEV2
ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbml0aWFs
S2V5RXZlbnQpCiAgICAgLy8gaW4gb3JkZXIgdG8gbWF0Y2ggSUU6CiAgICAgLy8gMS4gcHJldmVu
dGluZyBkZWZhdWx0IGhhbmRsaW5nIG9mIGtleWRvd24gYW5kIGtleXByZXNzIGV2ZW50cyBoYXMg
bm8gZWZmZWN0IG9uIElNIGlucHV0OwogICAgIC8vIDIuIGlmIGFuIGlucHV0IG1ldGhvZCBoYW5k
bGVzIHRoZSBldmVudCwgaXRzIGtleUNvZGUgaXMgc2V0IHRvIDIyOSBpbiBrZXlkb3duIGV2ZW50
LgotICAgIG1fZnJhbWUuZWRpdG9yKCkuaGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKGtleWRvd24u
Z2V0KCkpOworICAgIG1fZnJhbWUuZWRpdG9yKCkuaGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKGtl
eWRvd24ucHRyKCkpOwogICAgIAogICAgIGJvb2wgaGFuZGxlZEJ5SW5wdXRNZXRob2QgPSBrZXlk
b3duLT5kZWZhdWx0SGFuZGxlZCgpOwogICAgIApAQCAtMzA0MCwxMCArMzA0MCwxMCBAQCBib29s
IEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbml0
aWFsS2V5RXZlbnQpCiAgICAgICAgIGtleWRvd24tPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAg
fQogICAgIAotICAgIGlmIChhY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKGtl
eWRvd24uZ2V0KCkpKQorICAgIGlmIChhY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0
aW9uKGtleWRvd24pKQogICAgICAgICBrZXlkb3duLT5zdG9wUHJvcGFnYXRpb24oKTsKIAotICAg
IGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93biwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAg
ZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChrZXlkb3duKTsKICAgICAvLyBJZiBmcmFtZSBjaGFuZ2Vk
IGFzIGEgcmVzdWx0IG9mIGtleWRvd24gZGlzcGF0Y2gsIHRoZW4gcmV0dXJuIGVhcmx5IHRvIGF2
b2lkIHNlbmRpbmcgYSBzdWJzZXF1ZW50IGtleXByZXNzIG1lc3NhZ2UgdG8gdGhlIG5ldyBmcmFt
ZS4KICAgICBib29sIGNoYW5nZWRGb2N1c2VkRnJhbWUgPSBtX2ZyYW1lLnBhZ2UoKSAmJiAmbV9m
cmFtZSAhPSAmbV9mcmFtZS5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwogICAgIGJvb2wga2V5ZG93blJlc3VsdCA9IGtleWRvd24tPmRlZmF1bHRIYW5kbGVk
KCkgfHwga2V5ZG93bi0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGNoYW5nZWRGb2N1c2VkRnJhbWU7
CkBAIC0zMDYyLDE0ICszMDYyLDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkKICAgICBrZXlQcmVzc0V2
ZW50LmRpc2FtYmlndWF0ZUtleURvd25FdmVudChQbGF0Zm9ybUV2ZW50OjpDaGFyLCBiYWNrd2Fy
ZENvbXBhdGliaWxpdHlNb2RlKTsKICAgICBpZiAoa2V5UHJlc3NFdmVudC50ZXh0KCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4ga2V5ZG93blJlc3VsdDsKLSAgICBSZWZQdHI8S2V5Ym9hcmRF
dmVudD4ga2V5cHJlc3MgPSBLZXlib2FyZEV2ZW50OjpjcmVhdGUoa2V5UHJlc3NFdmVudCwgbV9m
cmFtZS5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpKTsKKyAgICBSZWY8S2V5Ym9hcmRFdmVudD4g
a2V5cHJlc3MgPSBLZXlib2FyZEV2ZW50OjpjcmVhdGUoa2V5UHJlc3NFdmVudCwgbV9mcmFtZS5k
b2N1bWVudCgpLT5kZWZhdWx0VmlldygpKTsKICAgICBrZXlwcmVzcy0+c2V0VGFyZ2V0KGVsZW1l
bnQpOwogICAgIGlmIChrZXlkb3duUmVzdWx0KQogICAgICAgICBrZXlwcmVzcy0+c2V0RGVmYXVs
dFByZXZlbnRlZCh0cnVlKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBrZXlwcmVzcy0+a2V5
cHJlc3NDb21tYW5kcygpID0ga2V5ZG93bi0+a2V5cHJlc3NDb21tYW5kcygpOwogI2VuZGlmCi0g
ICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChrZXlwcmVzcywgSUdOT1JFX0VYQ0VQVElPTik7Cisg
ICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChrZXlwcmVzcyk7CiAKICAgICByZXR1cm4ga2V5ZG93
blJlc3VsdCB8fCBrZXlwcmVzcy0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGtleXByZXNzLT5kZWZh
dWx0SGFuZGxlZCgpOwogfQpAQCAtMzE4Niw3ICszMTg2LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6
OmhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1lbnRGb3JBY2Nlc3NpYmlsaXR5KEtleWJvYXJk
RXZlbnQKICAgICB9CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjphY2Nlc3NpYmlsaXR5UHJldmVu
dHNFdmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQqIGV2ZW50KQorYm9vbCBFdmVudEhhbmRs
ZXI6OmFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVudCYg
ZXZlbnQpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKCFBWE9iamVjdENhY2hlOjph
Y2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCgpKQpAQCAtMzE5Niw5ICsz
MTk2LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2ZW50UHJv
cG9nYXRpb24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIENoZWNrIGZvciBrZXkgZXZlbnRzIHRoYXQgYXJlIHJlbGV2YW50IHRvIGFjY2Vzc2li
aWxpdHk6IHRhYiBhbmQgYXJyb3dzIGtleXMgdGhhdCBjaGFuZ2UgZm9jdXMKLSAgICBpZiAoZXZl
bnQtPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDA5IikKKyAgICBpZiAoZXZlbnQua2V5SWRlbnRp
ZmllcigpID09ICJVKzAwMDkiKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBGb2N1c0RpcmVj
dGlvbiBkaXJlY3Rpb24gPSBmb2N1c0RpcmVjdGlvbkZvcktleShldmVudC0+a2V5SWRlbnRpZmll
cigpKTsKKyAgICBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBmb2N1c0RpcmVjdGlvbkZvcktl
eShldmVudC5rZXlJZGVudGlmaWVyKCkpOwogICAgIGlmIChkaXJlY3Rpb24gIT0gRm9jdXNEaXJl
Y3Rpb25Ob25lKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCkBAIC0zNDk0LDEwICszNDk0
LDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUZXh0SW5wdXRFdmVudChjb25zdCBTdHJp
bmcmIHRleHQsIEV2ZW50KiB1bmRlcmx5aW5nRXZlCiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9
IG1fZnJhbWUudmlldygpKQogICAgICAgICB2aWV3LT5kaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxp
bmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCk7CiAKLSAgICBSZWZQdHI8VGV4dEV2ZW50PiBl
dmVudCA9IFRleHRFdmVudDo6Y3JlYXRlKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCks
IHRleHQsIGlucHV0VHlwZSk7CisgICAgUmVmPFRleHRFdmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6
OmNyZWF0ZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0LCBpbnB1dFR5cGUp
OwogICAgIGV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50KTsKIAotICAg
IHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgdGFy
Z2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5k
bGVkKCk7CiB9CiAgICAgCkBAIC0zODk5LDExICszODk5LDExIEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAg
ICAgICAgICBSZWZQdHI8VG91Y2hMaXN0PiB0YXJnZXRUb3VjaGVzKGlzVG91Y2hDYW5jZWxFdmVu
dCA/IGVtcHR5TGlzdCA6IHRvdWNoZXNCeVRhcmdldC5nZXQodG91Y2hFdmVudFRhcmdldCkpOwog
ICAgICAgICAgICAgQVNTRVJUKHRhcmdldFRvdWNoZXMpOwogCi0gICAgICAgICAgICBSZWZQdHI8
VG91Y2hFdmVudD4gdG91Y2hFdmVudCA9CisgICAgICAgICAgICBSZWY8VG91Y2hFdmVudD4gdG91
Y2hFdmVudCA9CiAgICAgICAgICAgICAgICAgVG91Y2hFdmVudDo6Y3JlYXRlKGVmZmVjdGl2ZVRv
dWNoZXMuZ2V0KCksIHRhcmdldFRvdWNoZXMuZ2V0KCksIGNoYW5nZWRUb3VjaGVzW3N0YXRlXS5t
X3RvdWNoZXMuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZSwgdG91Y2hFdmVu
dFRhcmdldC0+dG9Ob2RlKCktPmRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSwKICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgMCwgMCwgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRLZXkoKSwgZXZl
bnQuc2hpZnRLZXkoKSwgZXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgICAgIHRvdWNoRXZlbnRU
YXJnZXQtPnRvTm9kZSgpLT5kaXNwYXRjaFRvdWNoRXZlbnQodG91Y2hFdmVudC5nZXQoKSk7Cisg
ICAgICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZGlzcGF0Y2hUb3VjaEV2ZW50
KHRvdWNoRXZlbnQpOwogICAgICAgICAgICAgc3dhbGxvd2VkRXZlbnQgPSBzd2FsbG93ZWRFdmVu
dCB8fCB0b3VjaEV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkgfHwgdG91Y2hFdmVudC0+ZGVmYXVs
dEhhbmRsZWQoKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CmluZGV4IDNkNTc1ODg0YTliYTg2MDdhNzlhN2ZkNDdjNzZkMTc0MzIzYjkzODcuLjI0MzVkYTAx
NTExODNhZTZkM2ZhYTk5ZGU0OTc2NzE1NzNhOTNjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuaApAQCAtMjQ3LDcgKzI0Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYpOwogICAgIHZvaWQgZGVm
YXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqKTsKIAotICAgIGJvb2wgYWNj
ZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50Kik7CisgICAg
Ym9vbCBhY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1l
bnRGb3JBY2Nlc3NpYmlsaXR5KEtleWJvYXJkRXZlbnQqKTsKIAogICAgIGJvb2wgaGFuZGxlVGV4
dElucHV0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdW5kZXJseWluZ0V2ZW50ID0g
bnVsbHB0ciwgVGV4dEV2ZW50SW5wdXRUeXBlID0gVGV4dEV2ZW50SW5wdXRLZXlib2FyZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCmluZGV4IDlmOTBiMDFiMTU4NTQwOGY2NjBkN2Ix
ZDAwZWM5NmZjODEyZmFkYjcuLjRhMTAxNTEyZDY4NjYzODg2MDBlZDczMmZjM2NhODQxNmY3YTQw
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCkBAIC00MTAsMTEgKzQxMCwxMSBA
QCBib29sIEV2ZW50U291cmNlOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBFdmVudFNvdXJjZTo6
Y3JlYXRlTWVzc2FnZUV2ZW50KCkKK1JlZjxNZXNzYWdlRXZlbnQ+IEV2ZW50U291cmNlOjpjcmVh
dGVNZXNzYWdlRXZlbnQoKQogewotICAgIFJlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2ZW50ID0gTWVz
c2FnZUV2ZW50OjpjcmVhdGUoKTsKKyAgICBSZWY8TWVzc2FnZUV2ZW50PiBldmVudCA9IE1lc3Nh
Z2VFdmVudDo6Y3JlYXRlKCk7CiAgICAgZXZlbnQtPmluaXRNZXNzYWdlRXZlbnQobV9ldmVudE5h
bWUuaXNFbXB0eSgpID8gZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCA6IEF0b21pY1N0cmluZyht
X2V2ZW50TmFtZSksIGZhbHNlLCBmYWxzZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
U3RyaW5nOjphZG9wdChtX2RhdGEpKSwgbV9ldmVudFN0cmVhbU9yaWdpbiwgbV9sYXN0RXZlbnRJ
ZCwgMCwgMCk7Ci0gICAgcmV0dXJuIGV2ZW50LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gZXZlbnQ7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaApp
bmRleCBlNDlkNjhlMjM3ZmI5OWU2MTBlNmQ2YzdlMzZhYzlkM2E0YzI4YzZjLi4xZDI1NDU4ZWUz
ZDBiZmFkYjEyM2IwMWJmNmY5ZmVkZTAyNDNkZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJj
ZS5oCkBAIC05OSw3ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhYm9ydENvbm5lY3Rpb25B
dHRlbXB0KCk7CiAgICAgdm9pZCBwYXJzZUV2ZW50U3RyZWFtKCk7CiAgICAgdm9pZCBwYXJzZUV2
ZW50U3RyZWFtTGluZSh1bnNpZ25lZCBwb3MsIGludCBmaWVsZExlbmd0aCwgaW50IGxpbmVMZW5n
dGgpOwotICAgIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBjcmVhdGVNZXNzYWdlRXZlbnQoKTsK
KyAgICBSZWY8TWVzc2FnZUV2ZW50PiBjcmVhdGVNZXNzYWdlRXZlbnQoKTsKIAogICAgIFVSTCBt
X3VybDsKICAgICBib29sIG1fd2l0aENyZWRlbnRpYWxzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCmluZGV4IDFlN2ZlZDcwMTdhYTJiOWQyMDFjYWQwMDE3MWM5MDY4NWM1M2RjODQuLjMxYWMz
MWUwMmVhMjI1OWY4ZTI4NjdkYTdjZjc1ZGU3ZjE0M2Q4ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAKQEAgLTMxODQsMTQgKzMxODQsMTQgQEAgdm9pZCBGcmFtZVZpZXc6OnNlbmRSZXNp
emVFdmVudElmTmVlZGVkKCkKICAgICBib29sIGlzTWFpbkZyYW1lID0gZnJhbWUoKS5pc01haW5G
cmFtZSgpOwogICAgIGJvb2wgY2FuU2VuZFJlc2l6ZUV2ZW50U3luY2hyb25vdXNseSA9IGlzTWFp
bkZyYW1lICYmICFtX3Nob3VsZEF1dG9TaXplOwogCi0gICAgUmVmUHRyPEV2ZW50PiByZXNpemVF
dmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBmYWxzZSwgZmFs
c2UpOworICAgIFJlZjxFdmVudD4gcmVzaXplRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5yZXNpemVFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAoY2FuU2VuZFJlc2l6ZUV2
ZW50U3luY2hyb25vdXNseSkKLSAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5kaXNwYXRjaFdp
bmRvd0V2ZW50KHJlc2l6ZUV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGZyYW1lKCkuZG9jdW1l
bnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChyZXNpemVFdmVudCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBRdWV1ZWluZyB0aGlzIGV2ZW50IGZvciBhbiB1bnByZWRpY3RhYmxlIHRp
bWUgaW4gdGhlIGZ1dHVyZSBzZWVtcwogICAgICAgICAvLyBpbnRyaW5zaWNhbGx5IHJhY3kuIEJ5
IHRoZSB0aW1lIHRoaXMgcmVzaXplIGV2ZW50IGZpcmVzLCB0aGUgZnJhbWUgbWlnaHQKICAgICAg
ICAgLy8gYmUgcmVzaXplZCBhZ2Fpbiwgc28gd2UgY291bGQgZW5kIHVwIHdpdGggdHdvIHJlc2l6
ZSBldmVudHMgZm9yIHRoZSBzYW1lIHNpemUuCi0gICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+
ZW5xdWV1ZVdpbmRvd0V2ZW50KHJlc2l6ZUV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGZyYW1l
KCkuZG9jdW1lbnQoKS0+ZW5xdWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92ZShyZXNpemVFdmVudCkp
OwogICAgIH0KIAogICAgIGlmIChJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5k
cygpICYmIGlzTWFpbkZyYW1lKSB7CkBAIC0zMzc3LDExICszMzc3LDExIEBAIHZvaWQgRnJhbWVW
aWV3Ojp1cGRhdGVPdmVyZmxvd1N0YXR1cyhib29sIGhvcml6b250YWxPdmVyZmxvdywgYm9vbCB2
ZXJ0aWNhbE92ZXJmCiAgICAgICAgIG1faG9yaXpvbnRhbE92ZXJmbG93ID0gaG9yaXpvbnRhbE92
ZXJmbG93OwogICAgICAgICBtX3ZlcnRpY2FsT3ZlcmZsb3cgPSB2ZXJ0aWNhbE92ZXJmbG93Owog
Ci0gICAgICAgIFJlZlB0cjxPdmVyZmxvd0V2ZW50PiBvdmVyZmxvd0V2ZW50ID0gT3ZlcmZsb3dF
dmVudDo6Y3JlYXRlKGhvcml6b250YWxPdmVyZmxvd0NoYW5nZWQsIGhvcml6b250YWxPdmVyZmxv
dywKKyAgICAgICAgUmVmPE92ZXJmbG93RXZlbnQ+IG92ZXJmbG93RXZlbnQgPSBPdmVyZmxvd0V2
ZW50OjpjcmVhdGUoaG9yaXpvbnRhbE92ZXJmbG93Q2hhbmdlZCwgaG9yaXpvbnRhbE92ZXJmbG93
LAogICAgICAgICAgICAgdmVydGljYWxPdmVyZmxvd0NoYW5nZWQsIHZlcnRpY2FsT3ZlcmZsb3cp
OwogICAgICAgICBvdmVyZmxvd0V2ZW50LT5zZXRUYXJnZXQodmlld3BvcnRSZW5kZXJlci0+ZWxl
bWVudCgpKTsKIAotICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmVucXVldWVPdmVyZmxvd0V2
ZW50KG92ZXJmbG93RXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgp
LT5lbnF1ZXVlT3ZlcmZsb3dFdmVudChXVEY6Om1vdmUob3ZlcmZsb3dFdmVudCkpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggOTNjNzA2
YzA3MDQ1YmI2YmI5ZTU0Yzg5NWM2NWQwMzY5NjFmNWRkNi4uYzYxY2M4YjY3ZDMyZWIzZjI0NmNi
ZjVmMTBjYTljOTc2ZmY4ZDcyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCkBAIC0xNjksOSArMTY5LDkgQEAgcHVibGljOgogICAgICAgICBpZiAoIWhvcml6b250
YWxMYXlvdXRPdmVyZmxvd0NoYW5nZWQgJiYgIXZlcnRpY2FsTGF5b3V0T3ZlcmZsb3dDaGFuZ2Vk
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFJlZlB0cjxPdmVyZmxvd0V2ZW50PiBv
dmVyZmxvd0V2ZW50ID0gT3ZlcmZsb3dFdmVudDo6Y3JlYXRlKGhvcml6b250YWxMYXlvdXRPdmVy
Zmxvd0NoYW5nZWQsIGhhc0hvcml6b250YWxMYXlvdXRPdmVyZmxvdywgdmVydGljYWxMYXlvdXRP
dmVyZmxvd0NoYW5nZWQsIGhhc1ZlcnRpY2FsTGF5b3V0T3ZlcmZsb3cpOworICAgICAgICBSZWY8
T3ZlcmZsb3dFdmVudD4gb3ZlcmZsb3dFdmVudCA9IE92ZXJmbG93RXZlbnQ6OmNyZWF0ZShob3Jp
em9udGFsTGF5b3V0T3ZlcmZsb3dDaGFuZ2VkLCBoYXNIb3Jpem9udGFsTGF5b3V0T3ZlcmZsb3cs
IHZlcnRpY2FsTGF5b3V0T3ZlcmZsb3dDaGFuZ2VkLCBoYXNWZXJ0aWNhbExheW91dE92ZXJmbG93
KTsKICAgICAgICAgb3ZlcmZsb3dFdmVudC0+c2V0VGFyZ2V0KG1fYmxvY2stPmVsZW1lbnQoKSk7
Ci0gICAgICAgIG1fYmxvY2stPmRvY3VtZW50KCkuZW5xdWV1ZU92ZXJmbG93RXZlbnQob3ZlcmZs
b3dFdmVudC5yZWxlYXNlKCkpOworICAgICAgICBtX2Jsb2NrLT5kb2N1bWVudCgpLmVucXVldWVP
dmVyZmxvd0V2ZW50KFdURjo6bW92ZShvdmVyZmxvd0V2ZW50KSk7CiAgICAgfQogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKaW5kZXggMDcy
MTA3NjlmZDA2YmE5Y2U4N2FjNDY1MmM5OWUyYzE3OGQyODRmMS4uN2ViNThhMjZhNDhmZjcwZWZm
OWU1ZjU1M2Q1NmU0MDhmYjFmMjJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJFdmVudFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckV2ZW50UXVldWUuY3BwCkBAIC00OSw4ICs0OSw4IEBAIFdvcmtlckV2ZW50UXVldWU6On5Xb3Jr
ZXJFdmVudFF1ZXVlKCkKIGNsYXNzIFdvcmtlckV2ZW50UXVldWU6OkV2ZW50RGlzcGF0Y2hlcgog
ewogcHVibGljOgotICAgIEV2ZW50RGlzcGF0Y2hlcihQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwg
V29ya2VyRXZlbnRRdWV1ZSYgZXZlbnRRdWV1ZSkKLSAgICAgICAgOiBtX2V2ZW50KGV2ZW50KQor
ICAgIEV2ZW50RGlzcGF0Y2hlcihSZWZQdHI8RXZlbnQ+JiYgZXZlbnQsIFdvcmtlckV2ZW50UXVl
dWUmIGV2ZW50UXVldWUpCisgICAgICAgIDogbV9ldmVudChXVEY6Om1vdmUoZXZlbnQpKQogICAg
ICAgICAsIG1fZXZlbnRRdWV1ZShldmVudFF1ZXVlKQogICAgICAgICAsIG1faXNDYW5jZWxsZWQo
ZmFsc2UpCiAgICAgewpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX2lz
Q2FuY2VsbGVkKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2V2ZW50UXVldWUubV9l
dmVudERpc3BhdGNoZXJNYXAucmVtb3ZlKG1fZXZlbnQuZ2V0KCkpOwotICAgICAgICBtX2V2ZW50
LT50YXJnZXQoKS0+ZGlzcGF0Y2hFdmVudChtX2V2ZW50KTsKKyAgICAgICAgbV9ldmVudC0+dGFy
Z2V0KCktPmRpc3BhdGNoRXZlbnQoKm1fZXZlbnQpOwogICAgICAgICBtX2V2ZW50ID0gbnVsbHB0
cjsKICAgICB9CiAKQEAgLTgzLDEzICs4MywxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0Nh
bmNlbGxlZDsKIH07CiAKLWJvb2wgV29ya2VyRXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBXb3JrZXJFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQo
UmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIGlmIChtX2lzQ2xvc2VkKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBFdmVudERpc3BhdGNoZXIqIGV2ZW50RGlzcGF0Y2hlclB0ciA9IG5l
dyBFdmVudERpc3BhdGNoZXIoZXZlbnQuZ2V0KCksICp0aGlzKTsKLSAgICBtX2V2ZW50RGlzcGF0
Y2hlck1hcC5hZGQoZXZlbnQsIGV2ZW50RGlzcGF0Y2hlclB0cik7CisgICAgRXZlbnREaXNwYXRj
aGVyKiBldmVudERpc3BhdGNoZXJQdHIgPSBuZXcgRXZlbnREaXNwYXRjaGVyKGV2ZW50LmNvcHlS
ZWYoKSwgKnRoaXMpOworICAgIG1fZXZlbnREaXNwYXRjaGVyTWFwLmFkZChldmVudC5wdHIoKSwg
ZXZlbnREaXNwYXRjaGVyUHRyKTsKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQucG9zdFRh
c2soW2V2ZW50RGlzcGF0Y2hlclB0cl0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFdmVudERpc3BhdGNoZXI+IGV2ZW50RGlzcGF0Y2hlcihldmVu
dERpc3BhdGNoZXJQdHIpOwogICAgICAgICBldmVudERpc3BhdGNoZXItPmRpc3BhdGNoKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5oCmluZGV4IDlhMDU3NTY4MTE5
MjkyMzBiNGJlZTU3ODBkZWM4NDE5ZDU1YTI0N2UuLjNkYmYzM2RiMzhiN2M3OTMzMThkYmJmMWU0
ODQ5NGYwNDI2ZWNiNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
RXZlbnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1
ZS5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBXb3JrZXJFdmVudFF1
ZXVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKICAgICB2aXJ0dWFsIH5Xb3JrZXJFdmVudFF1
ZXVlKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3Bw
CmluZGV4IGFiMTcwOGZlNDQyNWQwMWY2NTE1ODM5MzM1NDdkOWM5YzdkYjZlMWQuLmMzZTE1Mzhi
NDI2Y2UzNTY1OGMwOGIzMTJkOGZjOTE5MDU5OTBhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcApA
QCAtODEsMjUgKzgxLDI0IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0
bGU6OmRpc3BhdGNoVGhyb3R0bGVkUHJvZ3Jlc3NFdmVudChib29sIGxlCiAgICAgbV9oYXNUaHJv
dHRsZWRQcm9ncmVzc0V2ZW50ID0gdHJ1ZTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoUmVmUHRyPEV2
ZW50PiYmIGV2ZW50LCBQcm9ncmVzc0V2ZW50QWN0aW9uIHByb2dyZXNzRXZlbnRBY3Rpb24pCit2
b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFJlYWR5U3Rh
dGVDaGFuZ2VFdmVudChFdmVudCYgZXZlbnQsIFByb2dyZXNzRXZlbnRBY3Rpb24gcHJvZ3Jlc3NF
dmVudEFjdGlvbikKIHsKICAgICBpZiAocHJvZ3Jlc3NFdmVudEFjdGlvbiA9PSBGbHVzaFByb2dy
ZXNzRXZlbnQpCiAgICAgICAgIGZsdXNoUHJvZ3Jlc3NFdmVudCgpOwogCi0gICAgZGlzcGF0Y2hF
dmVudChXVEY6Om1vdmUoZXZlbnQpKTsKKyAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAot
dm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudChS
ZWZQdHI8RXZlbnQ+JiYgZXZlbnQpCit2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRo
cm90dGxlOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKLSAgICBBU1NFUlQoZXZlbnQp
OwogICAgIGlmIChtX2RlZmVyRXZlbnRzKSB7Ci0gICAgICAgIGlmIChtX2RlZmVycmVkRXZlbnRz
LnNpemUoKSA+IDEgJiYgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNo
YW5nZUV2ZW50ICYmIGV2ZW50LT50eXBlKCkgPT0gbV9kZWZlcnJlZEV2ZW50cy5sYXN0KCktPnR5
cGUoKSkgeworICAgICAgICBpZiAobV9kZWZlcnJlZEV2ZW50cy5zaXplKCkgPiAxICYmIGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50ICYmIGV2ZW50LnR5
cGUoKSA9PSBtX2RlZmVycmVkRXZlbnRzLmxhc3QoKS0+dHlwZSgpKSB7CiAgICAgICAgICAgICAv
LyBSZWFkeXN0YXRlY2hhbmdlIGV2ZW50cyBhcmUgc3RhdGUtbGVzcyBzbyBhdm9pZCByZXBlYXRp
bmcgdHdvIGlkZW50aWNhbCBldmVudHMgaW4gYSByb3cgb24gcmVzdW1lLgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKFdURjo6
bW92ZShldmVudCkpOworICAgICAgICBtX2RlZmVycmVkRXZlbnRzLmFwcGVuZChldmVudCk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIG1fdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFdURjo6bW92ZShldmVu
dCkpOworICAgICAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIHZvaWQg
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCkBAIC0xMjAsOCArMTE5LDcgQEAgdm9pZCBYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6Zmx1c2hQcm9ncmVzc0V2ZW50KCkKIHsK
ICAgICBpZiAobV9kZWZlckV2ZW50cyAmJiBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCkgewogICAg
ICAgICAvLyBNb3ZlIHRoZSBwcm9ncmVzcyBldmVudCB0byB0aGUgcXVldWUsIHRvIGdldCBpdCBp
biB0aGUgcmlnaHQgb3JkZXIgb24gcmVzdW1lLgotICAgICAgICBtX2RlZmVycmVkRXZlbnRzLmFw
cGVuZChtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCk7Ci0gICAgICAgIG1fZGVmZXJyZWRQcm9ncmVz
c0V2ZW50ID0gbnVsbHB0cjsKKyAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQobV9kZWZl
cnJlZFByb2dyZXNzRXZlbnQucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTE0NCwxNiArMTQyLDE1IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50VGhyb3R0bGU6OmRpc3BhdGNoRGVmZXJyZWRFdmVudHMoKQogICAgIC8vIFRha2Ugb3ZlciB0
aGUgZGVmZXJyZWQgZXZlbnRzIGJlZm9yZSBkaXNwYXRjaGluZyB0aGVtIHdoaWNoIGNhbiBwb3Rl
bnRpYWxseSBhZGQgbW9yZS4KICAgICBhdXRvIGRlZmVycmVkRXZlbnRzID0gV1RGOjptb3ZlKG1f
ZGVmZXJyZWRFdmVudHMpOwogCi0gICAgUmVmUHRyPEV2ZW50PiBkZWZlcnJlZFByb2dyZXNzRXZl
bnQgPSBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudDsKLSAgICBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVu
dCA9IG51bGxwdHI7CisgICAgUmVmUHRyPEV2ZW50PiBkZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBX
VEY6Om1vdmUobV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpOwogCiAgICAgZm9yIChhdXRvJiBkZWZl
cnJlZEV2ZW50IDogZGVmZXJyZWRFdmVudHMpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoZGVmZXJy
ZWRFdmVudC5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRjaEV2ZW50KGRlZmVycmVkRXZlbnQp
OwogCiAgICAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IHdpbGwgYmUgaW4gdGhlIG1fZGVmZXJyZWRF
dmVudHMgdmVjdG9yIGlmIHRoZSBsb2FkIHdhcyBmaW5pc2hlZCB3aGlsZSBzdXNwZW5kZWQuCiAg
ICAgLy8gSWYgbm90LCBqdXN0IHNlbmQgdGhlIG1vc3QgdXAtdG8tZGF0ZSBwcm9ncmVzcyBvbiBy
ZXN1bWUuCiAgICAgaWYgKGRlZmVycmVkUHJvZ3Jlc3NFdmVudCkKLSAgICAgICAgZGlzcGF0Y2hF
dmVudChXVEY6Om1vdmUoZGVmZXJyZWRQcm9ncmVzc0V2ZW50KSk7CisgICAgICAgIGRpc3BhdGNo
RXZlbnQoKmRlZmVycmVkUHJvZ3Jlc3NFdmVudCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZpcmVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oIGIvU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgKaW5kZXggMjlmNGQ2
NTVkODNkMTZmNjE3MGZkNTU4NzU2ZDVhNzYxOTUwNGYwMi4uYzEwMDllNTBkYjkwOGNhNDMzY2U0
NWRmNTNmZTUwNzRlZmE3NzYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgKQEAgLTQ5LDcgKzQ5LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgflhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
KCk7CiAKICAgICB2b2lkIGRpc3BhdGNoVGhyb3R0bGVkUHJvZ3Jlc3NFdmVudChib29sIGxlbmd0
aENvbXB1dGFibGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkZWQsIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0b3RhbCk7Ci0gICAgdm9pZCBkaXNwYXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVudChSZWZQdHI8
RXZlbnQ+JiYsIFByb2dyZXNzRXZlbnRBY3Rpb24gPSBEb05vdEZsdXNoUHJvZ3Jlc3NFdmVudCk7
CisgICAgdm9pZCBkaXNwYXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVudChFdmVudCYsIFByb2dyZXNz
RXZlbnRBY3Rpb24gPSBEb05vdEZsdXNoUHJvZ3Jlc3NFdmVudCk7CiAgICAgdm9pZCBkaXNwYXRj
aFByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICB2b2lkIHN1c3BlbmQo
KTsKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKTsK
ICAgICB2b2lkIGRpc3BhdGNoRGVmZXJyZWRFdmVudHMoKTsKICAgICB2b2lkIGZsdXNoUHJvZ3Jl
c3NFdmVudCgpOwotICAgIHZvaWQgZGlzcGF0Y2hFdmVudChSZWZQdHI8RXZlbnQ+JiYpOworICAg
IHZvaWQgZGlzcGF0Y2hFdmVudChFdmVudCYpOwogCiAgICAgYm9vbCBoYXNFdmVudFRvRGlzcGF0
Y2goKSBjb25zdDsKIApAQCAtNzUsNyArNzUsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2Rl
ZmVyRXZlbnRzOwogICAgIFJlZlB0cjxFdmVudD4gbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQ7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fZGVmZXJyZWRFdmVudHM7CisgICAgVmVjdG9yPFJl
ZjxFdmVudD4+IG1fZGVmZXJyZWRFdmVudHM7CiAgICAgVGltZXIgbV9kaXNwYXRjaERlZmVycmVk
RXZlbnRzVGltZXI7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265363</attachid>
            <date>2015-11-11 21:51:03 -0800</date>
            <delta_ts>2015-11-11 21:55:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151158-20151111215058.patch</filename>
            <type>text/plain</type>
            <size>124220</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IwZjM1OGI3ODBmMmMy
MDU2NzM0ODA4ZjBiOTExOTE0ODI4Nzk0Ni4uZDMyOTU0NzA1ZjE4NjQ5M2M4ZWI2ZmZjNzk0YTkx
MGEwMjhkMTZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFz
c1JlZlB0ciB0byBkaXNwYXRjaEV2ZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFzc1JlZlB0ciB0byBkaXNwYXRj
aEV2ZW50KCkgYmVjYXVzZToKKyAgICAgICAgMS4gUGFzc1JlZlB0ciBpcyBsZWdhY3kgYW5kIHNo
b3VsZCBubyBsb25nZXIgYmUgdXNlZAorICAgICAgICAyLiBXZSBkb24ndCBhY3R1YWxseSB0cmFu
c2ZlciBvd25lcnNoaXAgb2YgdGhlIEV2ZW50IHRvIHRoZSBjYWxsZWUKKworICAgICAgICBQYXNz
IGEgQysrIHJlZmVyZW5jZSBpbnN0ZWFkLgorCiAyMDE1LTExLTExICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIGhhbmRsZS4qRXZlbnQgdG8gZGlz
cGF0Y2guKkV2ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlDb250cm9sbGVyLmNwcAppbmRleCBjZjgyYTM1NTI5Y2UzMDgwN2QxNjkwNjllNWQ3YWZj
YjhhNDFiZDllLi4yNTIxNWM5NzA0NmNlOWZlMmJmYWIxZTBiNGQwMWQxNGFiMTM1YjhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxl
ci5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6dXBkYXRlQmF0
dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGEKIAogdm9pZCBC
YXR0ZXJ5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQog
ewotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFs
c2UsIGZhbHNlKTsKKyAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5
cGUsIGZhbHNlLCBmYWxzZSk7CiAgICAgUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnkgPSBi
YXR0ZXJ5U3RhdHVzOwogICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycykKICAg
ICAgICAgbGlzdGVuZXItPmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoZXZlbnQsIGJhdHRlcnkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAK
aW5kZXggM2MxZWE3NzQ1NmY0ZDJhOTY3NzdlNDlkYzY1MDExNGEyODY2NWY2Mi4uZDZkMTgwZTg1
NTYwYWNkM2Y3Yzc5Y2I1NTc3NGE4MDQxMDc5YzJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIGRv
dWJsZSBCYXR0ZXJ5TWFuYWdlcjo6bGV2ZWwoKQogICAgIHJldHVybiBtX2JhdHRlcnlTdGF0dXMg
PyBtX2JhdHRlcnlTdGF0dXMtPmxldmVsKCkgOiAxOwogfQogCi12b2lkIEJhdHRlcnlNYW5hZ2Vy
OjpkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVm
UHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMpCit2b2lkIEJhdHRlcnlNYW5hZ2VyOjpk
aWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKEV2ZW50JiBldmVudCwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3Rh
dHVzPiBiYXR0ZXJ5U3RhdHVzKQogewogICAgIHVwZGF0ZUJhdHRlcnlTdGF0dXMoYmF0dGVyeVN0
YXR1cyk7CiAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oCmluZGV4IDc5YTAxZjkzNjliMDYzOTg4ZjZi
YzI3YzY5NjhjNzU1NGU4Y2RkYWYuLmQ0ZTNkMjYxNWUyNjEyMDg0NzA1YWQ2MmI1MWNiNTMyYTA4
YzI5MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5
TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFu
YWdlci5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgZGlzY2hhcmdpbmdU
aW1lKCk7CiAgICAgZG91YmxlIGxldmVsKCk7CiAKLSAgICB2b2lkIGRpZENoYW5nZUJhdHRlcnlT
dGF0dXMoUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworICAg
IHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhFdmVudCYsIFBhc3NSZWZQdHI8QmF0dGVyeVN0
YXR1cz4pOwogICAgIHZvaWQgdXBkYXRlQmF0dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEJhdHRlcnlT
dGF0dXM+KTsKICAgICB2b2lkIGJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCkgeyBtX2JhdHRl
cnlDb250cm9sbGVyID0gbnVsbHB0cjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBiODhlZGU1OGQ4
MWU0MDZjODAyZTUzZThhNDE4NzQ5YmQxMzM3YTk5Li5mODFmMzY1ODJkN2RiZmY1MjVlOGNlODdi
OWYwNTczODI3MWI0ODFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTM2LDMwICszNiwzMCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChF
dmVudCogZXZlbnQsIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYgZXZlbnRUYXJnZXRzKQor
Ym9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50JiBldmVudCwgVmVjdG9yPFJl
ZlB0cjxFdmVudFRhcmdldD4+JiBldmVudFRhcmdldHMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBl
dmVudFRhcmdldHMuc2l6ZSgpOwogICAgIEFTU0VSVChzaXplKTsKIAotICAgIGV2ZW50LT5zZXRF
dmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOworICAgIGV2ZW50LnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7CiAgICAgZm9yIChzaXplX3QgaSA9IHNpemUgLSAx
OyBpOyAtLWkpIHsgLy8gRG9uJ3QgZG8gdGhlIGZpcnN0IGVsZW1lbnQuCi0gICAgICAgIGV2ZW50
LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1tpXS5nZXQoKSk7CisgICAgICAgIGV2ZW50
LnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKICAgICAgICAgZXZlbnRU
YXJnZXRzW2ldLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwotICAgICAgICBpZiAoZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBpZiAoZXZlbnQucHJvcGFnYXRpb25TdG9w
cGVkKCkpCiAgICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKICAgICB9CiAKLSAgICBl
dmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKLSAgICBldmVudC0+c2V0Q3Vy
cmVudFRhcmdldChldmVudFRhcmdldHNbMF0uZ2V0KCkpOworICAgIGV2ZW50LnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChldmVudFRh
cmdldHNbMF0uZ2V0KCkpOwogICAgIGV2ZW50VGFyZ2V0c1swXS0+ZmlyZUV2ZW50TGlzdGVuZXJz
KGV2ZW50KTsKLSAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8ICFldmVudC0+
YnViYmxlcygpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICBpZiAoZXZlbnQucHJvcGFn
YXRpb25TdG9wcGVkKCkgfHwgIWV2ZW50LmJ1YmJsZXMoKSB8fCBldmVudC5jYW5jZWxCdWJibGUo
KSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKLSAgICBldmVudC0+c2V0RXZlbnRQ
aGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkJVQkJMSU5HX1BIQVNFKTsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsr
aSkgeyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgZXZlbnQtPnNldEN1
cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnQuc2V0Q3Vy
cmVudFRhcmdldChldmVudFRhcmdldHNbaV0uZ2V0KCkpOwogICAgICAgICBldmVudFRhcmdldHNb
aV0tPmZpcmVFdmVudExpc3RlbmVycyhldmVudCk7Ci0gICAgICAgIGlmIChldmVudC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQorICAgICAgICBpZiAoZXZl
bnQucHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZlbnQuY2FuY2VsQnViYmxlKCkpCiAgICAgICAg
ICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKICAgICB9CiAKQEAgLTgyLDkgKzgyLDkgQEAgYm9v
bCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50KiBldmVudCwgVmVjdG9yPFJlZlB0
cjxFdmVudFRhcmdldD4+JiBldmUKICAgICAvLyAgICAgICAgZXZlbnQgb24gdGhlIHdpbmRvdyB1
bnRpbCB0aGF0IGhhcyBiZWVuIGltcGxlbWVudGVkKS4iIC0tIEpvbmFzIFNpY2tpbmcKIAogZG9u
ZURpc3BhdGNoaW5nOgotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOwotICAg
IGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOwotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2
ZW50ZWQoKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOworICAgIGV2ZW50
LnNldEV2ZW50UGhhc2UoMCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggYTQ2MzkzZWQ4NmM0
YTYxZTU2OTY0NWM5NmM5MWM1NTA4MjY0ZWZmZi4uZWQ1OTU5NzVhY2I2NWFkNjcyZjUyODk5YWQw
MmYzYWYzZjMzNTAwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgRXZlbnRU
YXJnZXQ7CiAKIGNsYXNzIElEQkV2ZW50RGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IGJvb2wgZGlzcGF0Y2goRXZlbnQqLCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4mKTsgLy8g
VGhlIHRhcmdldCBmaXJzdCBhbmQgdGhlbiBpdHMgYW5jZXN0b3JzIGluIG9yZGVyIG9mIGhvdyB0
aGUgZXZlbnQgYnViYmxlcy4KKyAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaChFdmVudCYsIFZlY3Rv
cjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFuZCB0aGVuIGl0
cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgogCiBwcml2YXRl
OgogICAgIElEQkV2ZW50RGlzcGF0Y2hlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAppbmRleCBk
YmUwMDBmNTcxNGFlMjg4ZjA2MzQ4MjNlYzYzNWZmMTg0NGM4MWIzLi42MWIxNzdjODk4OGZkNzYz
ZmVkODIyNDE4ZDEzMGY2OTk1NDI3OTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtMzMx
LDcgKzMzMSw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQodWlu
dDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKICAgICAKICAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gSURC
VmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUoY3VycmVudFZlcnNpb24sIHJlcXVlc3RlZFZlcnNp
b24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpOwogICAgIGV2ZW50LT5zZXRUYXJn
ZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5x
dWV1ZUV2ZW50KGFkb3B0UmVmKCZldmVudC5sZWFrUmVmKCkpKTsKKyAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7
CiB9CiAKIHZvaWQgSURCRGF0YWJhc2U6OmRpZENyZWF0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRl
eEluZm8mIGluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcAppbmRleCA3NWI5NjVkOTBkMDE5ZTBmNTY4
YzQzYzdmZDhmOTVjMTFjOWVlZWVjLi45OGFlYWQ1ZTlkMTVmYTE2ZmFhNjdhZjhiMTMyNjFmYWNl
MmY5ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKQEAgLTE5NCwxNiArMTk0LDE0IEBAIHZvaWQg
SURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoJmV2ZW50LmdldCgpKTsKKyAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjpt
b3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVu
dCYgZXZlbnQpCiB7Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZl
bnQgLSAlcyIsIHBycEV2ZW50LT50eXBlKCkuY2hhcmFjdGVyczgoKSk7CisgICAgTE9HKEluZGV4
ZWREQiwgIklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQgLSAlcyIsIGV2ZW50LnR5cGUoKS5jaGFy
YWN0ZXJzOCgpKTsKIAotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKLQotICAg
IGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgaWYg
KGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQogICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKIAogICAgIFZlY3RvcjxSZWZQ
dHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOwpAQCAtMjE3LDcgKzIxNSw3IEBAIGJvb2wgSURCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBib29s
IGRvbnRQcmV2ZW50RGVmYXVsdDsKICAgICB7CiAgICAgICAgIFRyYW5zYWN0aW9uQWN0aXZhdG9y
IGFjdGl2YXRvcihtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgZG9udFByZXZlbnREZWZh
dWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7
CisgICAgICAgIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2goZXZlbnQsIHRhcmdldHMpOwogICAgIH0KIAogICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJSZXF1ZXN0SW1wbC5oCmluZGV4IGE0MmIxN2I0NDNjNDFjODNjYThlZjlkNmVkNDAy
MzM4ZjQyNjkyYzguLjI5MGUzOWM1YmQzYzk2YzYxOGM1OThmZjg0MDg0MDA1M2ZjMDNmNDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1
ZXN0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJSZXF1ZXN0SW1wbC5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZD
b3VudGVkPElEQlJlcXVlc3Q+OjpkZXJlZjsKIAogICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxF
dmVudD4mJik7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50
Jikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rp
b24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNw
cAppbmRleCAwZGMxYzRmNThlNDYyMjllYzE3YjUxNWIwMWIzMWQ2MmJlNDZjMDYwLi40YTQ3MTk0
YzM0OTk5MzkwYTdjOTdiYWY0MjNiZTRlN2E5ZDEwZmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25J
bXBsLmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmZpcmVPbkFi
b3J0KCkKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJvcnRF
dmVudCwgdHJ1ZSwgZmFsc2UpKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2
ZW50KFJlZjxFdmVudD4gZXZlbnQpCit2b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQo
UmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIEFTU0VSVChtX3N0YXRlICE9IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQpOwogCkBAIC0zNTQsMjIgKzM1NCwyMiBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiBldmVudCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoJmV2ZW50LmdldCgpKTsKKyAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RG
Ojptb3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2
ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmRpc3BhdGNoRXZlbnQiKTsKIAogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09
IHRoaXMpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRl
RXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKIAogICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOwogICAgIHRhcmdldHMuYXBwZW5k
KHRoaXMpOwogICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOwogCi0gICAgcmV0dXJuIElEQkV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAgIHJldHVybiBJ
REJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LCB0YXJnZXRzKTsKIH0KIAogUmVmPElE
Qk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IGIzZDdi
M2NjMzY2ZDU4YWE3YTQ0YTE4ZDMyYTc3NjlkYjZlN2Q1MWMuLjA0MzYxOTU5MGMyNjcxNDFhMDc3
MzVkNWMxZDdiMTkxMDI3NjkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTcxLDcg
KzcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJy
aWRlIGZpbmFsIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgp
IG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYoKTsgfQogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNw
YXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVu
dCYpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBhY3RpdmVET01P
YmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCBib29sIGNhblN1
c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKQEAgLTEyOCw3ICsxMjgs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaXJlT25Db21wbGV0ZSgpOwogICAgIHZvaWQgZmly
ZU9uQWJvcnQoKTsKLSAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+KTsKKyAgICB2b2lk
IGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOwogCiAgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVl
c3RJbmRleFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJbmRleGVk
REI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0
YWJhc2UuY3BwCmluZGV4IGIwMTRlNjYyMWQyMGQxMTNjMWM3MTRjMzFhNzFkOTZmODMxZjg0MmQu
LmQwM2YxMjhjZDMxMWVkMjI5YmRjMzRjN2MwMWU1Y2UwZTExYjY3Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFi
YXNlLmNwcApAQCAtOTIsNyArOTIsNyBAQCBMZWdhY3lEYXRhYmFzZTo6fkxlZ2FjeURhdGFiYXNl
KCkKICAgICAgICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9u
dGVuZCBjb25uZWN0aW9uIGlzIGJlaW5nCiAgICAgICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBj
b3VsZCBmaXJlLgogICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykK
LSAgICAgICAgICAgIGNvbnRleHQtPmV2ZW50UXVldWUoKS5jYW5jZWxFdmVudCgqZXZlbnQpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXZlbnRRdWV1ZSgpLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAg
ICB9CiB9CiAKQEAgLTMyMSw3ICszMjEsNyBAQCB2b2lkIExlZ2FjeURhdGFiYXNlOjpjbG9zZUNv
bm5lY3Rpb24oKQogICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZlcnNpb24sIGJ1dCB0aGUg
ZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZwogICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBj
b3VsZCBmaXJlLgogICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7Ci0g
ICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKKyAg
ICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudChldmVudCk7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAgICAgfQogCkBAIC0zNDEsMjUg
KzM0MSwyNSBAQCB2b2lkIExlZ2FjeURhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UodWludDY0X3Qg
b2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKICAgICBlbnF1ZXVlRXZlbnQoTGVnYWN5
VmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgZXZlbnRO
YW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCkpOwogfQogCi12b2lkIExlZ2FjeURhdGFiYXNlOjpl
bnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIExlZ2FjeURhdGFiYXNl
OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIEFTU0VSVCghbV9jb250
ZXh0U3RvcHBlZCk7CiAgICAgQVNTRVJUKCFtX2lzQ2xvc2VkKTsKICAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5n
ZXQoKSk7Ci0gICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5jb3B5UmVm
KCkpOworICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkpOwogfQog
Ci1ib29sIExlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQorYm9vbCBMZWdhY3lEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudCIpOwot
ICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZl
bnQpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFu
Z2VFdmVudCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2
ZW50LmdldCgpKQorICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5wdHIoKSA9PSAmZXZl
bnQpCiAgICAgICAgICAgICBtX2VucXVldWVkRXZlbnRzLnJlbW92ZShpKTsKICAgICB9Ci0gICAg
cmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKKyAgICByZXR1
cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiBpbnQ2NF90IExlZ2Fj
eURhdGFiYXNlOjpmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5
RGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdh
Y3lEYXRhYmFzZS5oCmluZGV4IDExMzdlNWUzMDAyNDQxODFlMjE4ZTQ5ZjNkNTdiYjdjZDU4ZTY3
N2QuLmVhMWViNWYyM2RhMGY1NjZkOTYzMzY4YTY4YmMzMWFmNDRmZGIyNjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRh
YmFzZS5oCkBAIC04NCwxMCArODQsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNDbG9zZVBlbmRp
bmcoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlUGVuZGluZzsgfQogICAgIHZvaWQgZm9yY2VDbG9z
ZSgpOwogICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX21ldGFkYXRhOyB9Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAKICAgICB1c2luZyBF
dmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIGludDY0X3QgZmluZE9iamVjdFN0b3JlSWQo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAK
ICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9uY2hhbmdlIGV2ZW50cyB3YWl0aW5nIHRv
IGJlIGZpcmVkIG9uIHRoaXMKICAgICAvLyBkYXRhYmFzZSBzbyB0aGF0IHdlIGNhbiBjYW5jZWwg
dGhlbSBpZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBt
X2VucXVldWVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX2VucXVldWVkRXZlbnRz
OwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcAppbmRleCAzMjkwYzUwZjA0MmU5MGVm
MmVhYmE3Mjc1ODBlNzIzOTM0ODI2NTZkLi43MjE3YmMzZTRkYTcyYmM2YjRjNzZlZWQ5NWFmNzcx
NWM0NjFhZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwCkBAIC0xMzgsMTEgKzEz
OCwxMSBAQCBib29sIExlZ2FjeU9wZW5EQlJlcXVlc3Q6OnNob3VsZEVucXVldWVFdmVudCgpIGNv
bnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5T3BlbkRCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgTGVnYWN5T3BlbkRCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgLy8gSWYgdGhlIGNvbm5l
Y3Rpb24gY2xvc2VkIGJldHdlZW4gb25VcGdyYWRlTmVlZGVkIGFuZCB0aGUgZGVsaXZlcnkgb2Yg
dGhlICJzdWNjZXNzIiBldmVudCwKICAgICAvLyBhbiAiZXJyb3IiIGV2ZW50IHNob3VsZCBiZSBm
aXJlZCBpbnN0ZWFkLgotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQgJiYgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkRhdGFiYXNl
ICYmIG1fcmVzdWx0LT5sZWdhY3lEYXRhYmFzZSgpLT5pc0Nsb3NlUGVuZGluZygpKSB7CisgICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50ICYmIG1fcmVzdWx0
LT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSAmJiBtX3Jlc3VsdC0+bGVnYWN5
RGF0YWJhc2UoKS0+aXNDbG9zZVBlbmRpbmcoKSkgewogICAgICAgICBtX3Jlc3VsdCA9IG51bGxw
dHI7CiAgICAgICAgIG9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4iKSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCmluZGV4IDVhNTkz
YjVmNmVhYzcwZGI3ZDMwMmIwNmU4OWNlYmUzODQ4ZGU0NWYuLjY0ZjY2YzQwYjA3ODMzNTY3MWEz
YWI4ZGI4YjlkZTdiZGNhY2JhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaApAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgRXZl
bnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSBm
aW5hbDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikg
b3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBv
dmVycmlkZSBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbnF1
ZXVlRXZlbnQoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcAppbmRleCBhM2MyMDIw
YjAwMGI3MzRlZDZjYTdhMzNlZTM5NmVkODhhOGVlNTFjLi4yYzc0N2E1NmFhYWQ1M2NmN2Q0ZDNh
M2RkMDg0ZjhkNWYzMmE5YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCkBAIC0xNjYsNyArMTY2LDcg
QEAgdm9pZCBMZWdhY3lSZXF1ZXN0OjphYm9ydCgpCiAKICAgICBFdmVudFF1ZXVlJiBldmVudFF1
ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CiAgICAgZm9yIChh
dXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKLSAgICAgICAgYm9vbCByZW1vdmVkID0g
ZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOworICAgICAgICBib29sIHJlbW92ZWQgPSBl
dmVudFF1ZXVlLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1v
dmVkLCByZW1vdmVkKTsKICAgICB9CiAgICAgbV9lbnF1ZXVlZEV2ZW50cy5jbGVhcigpOwpAQCAt
MjYyLDcgKzI2Miw3IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6b25FcnJvcihQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yKQogICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPEV2ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQorc3RhdGljIFJlZjxFdmVudD4gY3JlYXRl
U3VjY2Vzc0V2ZW50KCkKIHsKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
c3VjY2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2UpOwogfQpAQCAtNDY2LDcgKzQ2Niw3IEBAIEV2ZW50
VGFyZ2V0SW50ZXJmYWNlIExlZ2FjeVJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3QKICAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAot
Ym9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQorYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQiKTsKICAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nKTsKQEAg
LTQ3NCwxNiArNDc0LDE2IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZpdHkpOwog
ICAgIEFTU0VSVChtX2VucXVldWVkRXZlbnRzLnNpemUoKSk7CiAgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsK
LSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVhZHlTdGF0ZSA8IElEQlJlcXVlc3RSZWFkeVN0
YXRlOjpEb25lLCAiV2hlbiBkaXNwYXRjaGluZyBldmVudCAlcywgbV9yZWFkeVN0YXRlIDwgRE9O
RSglZCksIHdhcyAlZCIsIGV2ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSksIHN0YXRpY19jYXN0PGlu
dD4obV9yZWFkeVN0YXRlKSk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZWFkeVN0YXRlIDwgSURCUmVxdWVzdFJlYWR5U3Rh
dGU6OkRvbmUsICJXaGVuIGRpc3BhdGNoaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgPCBET05F
KCVkKSwgd2FzICVkIiwgZXZlbnQudHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRp
Y19jYXN0PGludD4oSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpLCBzdGF0aWNfY2FzdDxpbnQ+
KG1fcmVhZHlTdGF0ZSkpOwogCiAgICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3Jl
cXVlc3RTdGF0ZSk7CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxv
Y2tlZEV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRF
dmVudCkKICAgICAgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0
KCkpCisgICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLnB0cigpID09ICZldmVudCkKICAg
ICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwogICAgIH0KIApAQCAtNTAwLDcg
KzUwMCw3IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKIAogICAgIC8vIEN1cnNvciBwcm9wZXJ0aWVzIHNob3VsZCBub3QgdXBkYXRl
ZCB1bnRpbCB0aGUgc3VjY2VzcyBldmVudCBpcyBiZWluZyBkaXNwYXRjaGVkLgogICAgIFJlZlB0
cjxMZWdhY3lDdXJzb3I+IGN1cnNvclRvTm90aWZ5OwotICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpIHsKICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBnZXRS
ZXN1bHRDdXJzb3IoKTsKICAgICAgICAgaWYgKGN1cnNvclRvTm90aWZ5KSB7CiAgICAgICAgICAg
ICBjdXJzb3JUb05vdGlmeS0+c2V0VmFsdWVSZWFkeShyZXF1ZXN0U3RhdGUoKSwgbV9jdXJzb3JL
ZXkucmVsZWFzZSgpLCBtX2N1cnNvclByaW1hcnlLZXkucmVsZWFzZSgpLCBtX2N1cnNvclZhbHVl
KTsKQEAgLTUwOCwxOSArNTA4LDE5IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpIHsKKyAgICBp
ZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpIHsKICAg
ICAgICAgQVNTRVJUKCFtX2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQpOwogICAgICAgICBtX2Rp
ZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQgPSB0cnVlOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBX
aGVuIHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5
IG5lZWQgdG8gY2hhbmdlLgotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmVycm9yRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2
ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCwg
ImV2ZW50IHR5cGUgd2FzICVzIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICBjb25zdCBib29sIHNldFRyYW5zYWN0aW9uQWN0aXZlID0gbV90cmFuc2FjdGlvbiAm
JiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCB8fCAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBtX2Vycm9yQ29kZSAhPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxv
Y2tlZEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2
ZW50LCAiZXZlbnQgdHlwZSB3YXMgJXMiLCBldmVudC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgY29uc3QgYm9vbCBzZXRUcmFuc2FjdGlvbkFjdGl2ZSA9IG1fdHJhbnNhY3Rp
b24gJiYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50IHx8IChldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgbV9lcnJvckNvZGUgIT0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIAogICAgIGlmIChzZXRUcmFuc2FjdGlvbkFjdGl2
ZSkKICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0QWN0aXZlKHRydWUpOwogCi0gICAgYm9vbCBk
b250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50Lmdl
dCgpLCB0YXJnZXRzKTsKKyAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogCiAgICAgaWYgKG1fdHJhbnNhY3Rp
b24pIHsKICAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6
RG9uZSkKQEAgLTUyOCw3ICs1MjgsNyBAQCBib29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAgICAgLy8gUG9zc2libHkgYWJvcnQg
dGhlIHRyYW5zYWN0aW9uLiBUaGlzIG11c3Qgb2NjdXIgYWZ0ZXIgdW5yZWdpc3RlcmluZyAoc28g
dGhpcyByZXF1ZXN0CiAgICAgICAgIC8vIGRvZXNuJ3QgcmVjZWl2ZSBhIHNlY29uZCBlcnJvcikg
YW5kIGJlZm9yZSBkZWFjdGl2YXRpbmcgKHdoaWNoIG1pZ2h0IHRyaWdnZXIgY29tbWl0KS4KLSAg
ICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9u
dFByZXZlbnREZWZhdWx0ICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7CisgICAgICAgIGlmIChldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9udFByZXZlbnREZWZhdWx0
ICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRF
cnJvcihtX2Vycm9yLCBtX2Vycm9yTWVzc2FnZSk7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9u
LT5hYm9ydChJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgfQpAQCAtNTQxLDcgKzU0MSw3IEBA
IGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpCiAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5wb3N0
U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOwogCi0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJREJS
ZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSAmJiAoIWN1cnNvclRvTm90aWZ5IHx8IG1fY3Vyc29yRmlu
aXNoZWQpICYmIGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVu
dCkKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lICYm
ICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JGaW5pc2hlZCkgJiYgZXZlbnQudHlwZSgpICE9
IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpCiAgICAgICAgIG1faGFzUGVuZGluZ0Fj
dGl2aXR5ID0gZmFsc2U7CiAKICAgICByZXR1cm4gZG9udFByZXZlbnREZWZhdWx0OwpAQCAtNTY1
LDcgKzU2NSw3IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6dHJhbnNhY3Rpb25EaWRGaW5pc2hBbmRE
aXNwYXRjaCgpCiAgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRp
bmc7CiB9CiAKLXZvaWQgTGVnYWN5UmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQordm9pZCBMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYm
IGV2ZW50KQogewogICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3Rh
dGU6OlBlbmRpbmcgfHwgbV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25l
KTsKIApAQCAtNTc2LDggKzU3Niw4IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6ZW5xdWV1ZUV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsK
IAotICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVl
RXZlbnQoZXZlbnQuZ2V0KCkpKQotICAgICAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVuZChldmVu
dCk7CisgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVl
dWVFdmVudChldmVudC5jb3B5UmVmKCkpKQorICAgICAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVu
ZChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVl
c3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1
ZXN0LmgKaW5kZXggNWFlZmIxMWQyMjgyYzc3ODFmYTZmOWQ2ODY3ZTY4ODU2ZjU3OTgzMS4uZWIx
ZmJhZWYyYWU2MjY1ZTMyMTdiYmFjZTVmMWMwN2U1ZmQxYmNiYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oCkBA
IC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRp
b25JbkV2ZW50SGFuZGxlcigpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdXNpbmcgRXZlbnRUYXJn
ZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2
ZW50Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHRyYW5zYWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0
Y2goKTsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIExl
Z2FjeVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIExlZ2FjeVRyYW5zYWN0aW9u
Kik7Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQg
ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAgICAgdmlydHVhbCBib29sIHNob3VsZEVucXVl
dWVFdmVudCgpIGNvbnN0OwogICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKICAgICB2b2lkIG9uU3VjY2Vzc0ludGVybmFsKGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CkBAIC0xMzksNyArMTM5LDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7CiAKICAg
ICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5OwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBt
X2VucXVldWVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX2VucXVldWVkRXZlbnRz
OwogCiAgICAgLy8gT25seSB1c2VkIGlmIHRoZSByZXN1bHQgdHlwZSB3aWxsIGJlIGEgY3Vyc29y
LgogICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5z
YWN0aW9uLmNwcAppbmRleCBmMGIzNGEwZGU4MjY1ODg4YzBhNGQzOGE2MWFlZTE5ZGI2NGNiN2Ix
Li5jZTg0OWZkM2Y3NjRhNDVmZTgwMWNhZGUyMTA2ZGVkMDE1ZTNiNGViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lU
cmFuc2FjdGlvbi5jcHAKQEAgLTMwNiwxMyArMzA2LDEzIEBAIGJvb2wgTGVnYWN5VHJhbnNhY3Rp
b246Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faGFzUGVuZGluZ0Fj
dGl2aXR5ICYmICFtX2NvbnRleHRTdG9wcGVkOwogfQogCi1ib29sIExlZ2FjeVRyYW5zYWN0aW9u
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBMZWdhY3lUcmFu
c2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOwogICAgIEFTU0VSVChtX3N0
YXRlICE9IEZpbmlzaGVkKTsKICAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZpdHkpOwogICAg
IEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFTU0VSVChldmVudC0+dGFy
Z2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOwogICAg
IG1fc3RhdGUgPSBGaW5pc2hlZDsKIAogICAgIC8vIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCkBA
IC0zMjgsOCArMzI4LDggQEAgYm9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICB0YXJnZXRzLmFwcGVuZChkYigpKTsKIAogICAg
IC8vIEZJWE1FOiBXaGVuIHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3
aWxsIHByb2JhYmx5IG5lZWQgdG8gY2hhbmdlLgotICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmFib3J0RXZlbnQpOwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBJREJFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKyAgICBBU1NFUlQoZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgYm9vbCByZXR1cm5WYWx1ZSA9IElEQkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogICAgIC8vIEZJWE1FOiBUcnkgdG8g
Y29uc3RydWN0IGEgdGVzdCB3aGVyZSB8dGhpc3wgb3V0bGl2ZXMgb3BlbkRCUmVxdWVzdCBhbmQg
d2UKICAgICAvLyBnZXQgYSBjcmFzaC4KICAgICBpZiAobV9vcGVuREJSZXF1ZXN0KSB7CkBAIC0z
NTksMTQgKzM1OSwxNCBAQCBjb25zdCBjaGFyKiBMZWdhY3lUcmFuc2FjdGlvbjo6YWN0aXZlRE9N
T2JqZWN0TmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuICJMZWdhY3lUcmFuc2FjdGlvbiI7CiB9CiAK
LXZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYg
ZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3N0YXRlICE9IEZpbmlzaGVkLCAi
QSBmaW5pc2hlZCB0cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9mIHR5cGUg
JXMuIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9j
b250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudCk7CisgICAgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVu
dCkpOwogfQogCiBJREJEYXRhYmFzZUJhY2tlbmQqIExlZ2FjeVRyYW5zYWN0aW9uOjpiYWNrZW5k
REIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaAppbmRleCA4M2I3OTcxMTVlNzliN2VmMWJj
Y2M1YWE0MDM3MGUyMzc1YWU5NDIyLi5mNzlkZWMzMzM5NWRhMmE1YmQ2NjMzYTYyM2M4M2EzZjk3
MDc1NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5VHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYp
IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVhbCBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwpAQCAtMTA0LDcg
KzEwNCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTGVnYWN5VHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGludDY0X3QsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUsIExlZ2FjeURhdGFiYXNlKiwgTGVnYWN5T3BlbkRCUmVxdWVz
dCosIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKTsKIAotICAgIHZvaWQgZW5xdWV1ZUV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYp
OwogICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOwogCiAgICAgdm9pZCByZWdpc3Rlck9wZW5D
dXJzb3IoTGVnYWN5Q3Vyc29yKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCmluZGV4IGMzY2MzODFhODhhMDJhODgyNzFmZGI3ZDQy
NTUxYTAzZWRjNTE3OGIuLjA0NDM0MGY3YTk4Yjg4ZmNlZTE2NzVkYTE5YTIxNGZkZjQ1NDQ5NzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCkBAIC0yOTksMTMgKzI5OSwxMSBAQCB2b2lkIE1lZGlhU3RyZWFtOjpzY2hlZHVsZUFj
dGl2ZVN0YXRlQ2hhbmdlKCkKIAogdm9pZCBNZWRpYVN0cmVhbTo6YWN0aXZpdHlFdmVudFRpbWVy
RmlyZWQoKQogewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CisgICAgVmVjdG9y
PFJlZjxFdmVudD4+IGV2ZW50czsKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEFjdGl2aXR5
RXZlbnRzKTsKIAogICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHMpCi0gICAgICAgIGRpc3Bh
dGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKLQotICAgIGV2ZW50cy5jbGVhcigpOworICAgICAg
ICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogVVJMUmVnaXN0cnkmIE1lZGlhU3RyZWFtOjpy
ZWdpc3RyeSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtLmgKaW5kZXggMzFhNDYxODRmMzIwMTdjMTBlMjc1ZTEwODhlYmNhMmQ5YTli
ZDU4ZC4uMWE0NTY0NzZiOGVjMzc2OTc2NmNmZmQwZTRmMmJhNWVjZGFiNWFhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaApAQCAtMTI4
LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0
cmVhbVRyYWNrPj4gbV90cmFja1NldDsKIAogICAgIFRpbWVyIG1fYWN0aXZpdHlFdmVudFRpbWVy
OwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEFjdGl2aXR5RXZlbnRzOwor
ICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX3NjaGVkdWxlZEFjdGl2aXR5RXZlbnRzOwogCiAgICAg
VmVjdG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAKaW5kZXggNTI3YjVkMTlk
OTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4YmNkNWQ5OS4uYzllMmNjYWM1YzFhNjM3Y2FlMjUyZWFh
ZTM5ZTE4ZWRhYWJkNGUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC0xNDUsOSArMTQ1LDkgQEAgYm9vbCBSVENE
VE1GU2VuZGVyOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgUlRDRFRNRlNlbmRlcjo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBSVENEVE1GU2VuZGVyOjpzY2hlZHVsZURpc3BhdGNo
RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewotICAgIG1fc2NoZWR1bGVkRXZlbnRzLmFwcGVu
ZChldmVudCk7CisgICAgbV9zY2hlZHVsZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkp
OwogCiAgICAgaWYgKCFtX3NjaGVkdWxlZEV2ZW50VGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV9zY2hlZHVsZWRFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKQEAgLTE1OCwxMSArMTU4LDEx
IEBAIHZvaWQgUlRDRFRNRlNlbmRlcjo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKCkKICAgICBp
ZiAobV9zdG9wcGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50
Pj4gZXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBldmVudHM7CiAgICAgZXZlbnRzLnN3
YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCiAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykK
LSAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaAppbmRleCAwMjNl
ODI3OTdiNjM0NTBkYWZjMzQ0YzgyNmE2NzNkOTNjM2NmZDNjLi5hYTVkZGE5MWJiOGY0OTQ1NmZh
N2RlOGJmZTRmZmFmYTZmMDM1NjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgog
ICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKICAg
ICBib29sIGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZv
aWQgc2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIHNj
aGVkdWxlRGlzcGF0Y2hFdmVudChSZWY8RXZlbnQ+JiYpOwogICAgIHZvaWQgc2NoZWR1bGVkRXZl
bnRUaW1lckZpcmVkKCk7CiAKICAgICAvLyBFdmVudFRhcmdldApAQCAtOTAsNyArOTAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zdG9wcGVkOwogCiAgICAgVGltZXIgbV9zY2hlZHVsZWRFdmVu
dFRpbWVyOwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKKyAg
ICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9zY2hlZHVsZWRFdmVudHM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0RhdGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDRGF0YUNoYW5uZWwuY3BwCmluZGV4IGQ3NzA4Y2EwNWJlYWQxNDE2NzdmYzg0NWE5YzMz
NzZlNjQ0ZmQzMTQuLjU1ZjUwODYxNjg2YzFkNmVhYmQyMDUzNDBlZDM4MzVhNjgyNWE0MjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5u
ZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCkBAIC0zMDQsOSArMzA0LDkgQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c3RvcCgp
CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBSVENE
YXRhQ2hhbm5lbDo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQordm9pZCBSVENEYXRhQ2hhbm5lbDo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFJlZjxFdmVudD4m
JiBldmVudCkKIHsKLSAgICBtX3NjaGVkdWxlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIG1f
c2NoZWR1bGVkRXZlbnRzLmFwcGVuZChXVEY6Om1vdmUoZXZlbnQpKTsKIAogICAgIGlmICghbV9z
Y2hlZHVsZWRFdmVudFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc2NoZWR1bGVkRXZlbnRU
aW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC0zMTcsMTEgKzMxNywxMSBAQCB2b2lkIFJUQ0RhdGFD
aGFubmVsOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAgIGlmIChtX3N0b3BwZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CisgICAg
VmVjdG9yPFJlZjxFdmVudD4+IGV2ZW50czsKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEV2
ZW50cyk7CiAKICAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmgKaW5kZXggODhlNzRhZTllZjIyODIyNTRh
MWFjNmJmNTNmYTRkNzU1NTQ0ZWU3NS4uNGE3YTVhZjdkNmViNTQxZWJhYjI0NjVmOWMwYjk1MjU2
YjU1NDdmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENEYXRhQ2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDRGF0YUNoYW5uZWwuaApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFJUQ0RhdGFDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBzdGQ6OnVuaXF1ZV9wdHI8
UlRDRGF0YUNoYW5uZWxIYW5kbGVyPik7CiAKLSAgICB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBzY2hlZHVsZURpc3BhdGNoRXZlbnQoUmVm
PEV2ZW50PiYmKTsKICAgICB2b2lkIHNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCgpOwogCiAgICAg
Ly8gRXZlbnRUYXJnZXQKQEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIEJpbmFyeVR5
cGUgbV9iaW5hcnlUeXBlOwogCiAgICAgVGltZXIgbV9zY2hlZHVsZWRFdmVudFRpbWVyOwotICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKKyAgICBWZWN0b3I8UmVm
PEV2ZW50Pj4gbV9zY2hlZHVsZWRFdmVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwCmluZGV4IGRkNDY0MWUxYjhkYTMyZGE3MTRmMzQ2ODEzMzk2N2M1ODFh
NDNlNjUuLmM2YWYxMmJkZjRlMzNjYzAzNGIzNzY4OTkzYzQwZTdjZmFlNWIxMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24uY3BwCkBAIC03MjUsOSArNzI1LDkgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6Y2hh
bmdlSWNlQ29ubmVjdGlvblN0YXRlKEljZUNvbm5lY3Rpb25TdGF0ZSBpY2VDb25uZWN0aW8KICAg
ICB9CiB9CiAKLXZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnNjaGVkdWxlRGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnNjaGVkdWxl
RGlzcGF0Y2hFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7Ci0gICAgbV9zY2hlZHVsZWRFdmVu
dHMuYXBwZW5kKGV2ZW50KTsKKyAgICBtX3NjaGVkdWxlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3Zl
KGV2ZW50KSk7CiAKICAgICBpZiAoIW1fc2NoZWR1bGVkRXZlbnRUaW1lci5pc0FjdGl2ZSgpKQog
ICAgICAgICBtX3NjaGVkdWxlZEV2ZW50VGltZXIuc3RhcnRPbmVTaG90KDApOwpAQCAtNzM4LDEx
ICs3MzgsMTEgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVkRXZlbnRUaW1lckZp
cmVkKCkKICAgICBpZiAobV9zdG9wcGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50Pj4gZXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBldmVudHM7CiAg
ICAgZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCiAgICAgZm9yIChhdXRvJiBldmVu
dCA6IGV2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOworICAg
ICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIAogICAgIGV2ZW50cy5jbGVhcigpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi5oCmluZGV4IDUyZGM3OTMwYjA0MjYyMDEwMWFkZjZkMmY2NDNkZmNhNWU4NWUwZjAuLjgy
M2JiZjIyMmIxNWI0ZWYzOWRmYjI0NDhkNWM3ZTg1NTA1Nzc1MDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmgKQEAg
LTEyNyw3ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIFJUQ1BlZXJDb25uZWN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBQYXNzUmVmUHRyPFJUQ0NvbmZpZ3VyYXRpb24+LCBFeGNlcHRpb25D
b2RlJik7CiAKICAgICBzdGF0aWMgUmVmUHRyPFJUQ0NvbmZpZ3VyYXRpb24+IHBhcnNlQ29uZmln
dXJhdGlvbihjb25zdCBEaWN0aW9uYXJ5JiBjb25maWd1cmF0aW9uLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBzY2hlZHVsZURpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAg
IHZvaWQgc2NoZWR1bGVEaXNwYXRjaEV2ZW50KFJlZjxFdmVudD4mJik7CiAgICAgdm9pZCBzY2hl
ZHVsZWRFdmVudFRpbWVyRmlyZWQoKTsKICAgICBib29sIGhhc0xvY2FsU3RyZWFtV2l0aFRyYWNr
SWQoY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCmluZGV4
IGU0NTMyYzhhMTVmZDU2MjlkMmExODU4OGY5N2IxNTRhMjA4ZjBkYmMuLjZjODNlZGNlYTUwOGUz
M2I2ZjY0NzYzYTc4OWVhNzUzMmE0MTRkMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KQEAg
LTI0Myw4ICsyNDMsOCBAQCB1bnNpZ25lZCBsb25nIGxvbmcgUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQ6Om1vdmllU2l6ZSgpIGNvbnN0CiB2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Ojpwb3N0RXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgUmVmPEhUTUxQbHVn
SW5FbGVtZW50PiBwcm90ZWN0KCptX3BhcmVudEVsZW1lbnQpOwotICAgIFJlZlB0cjxFdmVudD4g
ZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIHRydWUpOwotICAgIG1fcGFy
ZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7CisgICAgUmVmPEV2ZW50PiBl
dmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSk7CisgICAgbV9wYXJl
bnRFbGVtZW50LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hp
bWl0eUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2
aWNlUHJveGltaXR5Q29udHJvbGxlci5jcHAKaW5kZXggNjA3OGYzN2ZiOGQzYjkxZTRlYTc2YjQw
ZjNiMjQwY2IwMmRlMTNmYi4uNjhlYTI5NmFmODNhNTFjM2RlNjE4Yzk5NmVkNDExNjQ2YjE4Yzk3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJv
eGltaXR5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1p
dHkvRGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgYm9vbCBE
ZXZpY2VQcm94aW1pdHlDb250cm9sbGVyOjpoYXNMYXN0RGF0YSgpCiAgICAgcmV0dXJuIGRldmlj
ZVByb3hpbWl0eUNsaWVudCgpLT5oYXNMYXN0RGF0YSgpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50
PiBEZXZpY2VQcm94aW1pdHlDb250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQorUmVmUHRyPEV2ZW50
PiBEZXZpY2VQcm94aW1pdHlDb250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQogewogICAgIHJldHVy
biBEZXZpY2VQcm94aW1pdHlFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRkZXZpY2Vw
cm94aW1pdHlFdmVudCwgZGV2aWNlUHJveGltaXR5Q2xpZW50KCktPnZhbHVlKCksIGRldmljZVBy
b3hpbWl0eUNsaWVudCgpLT5taW4oKSwgZGV2aWNlUHJveGltaXR5Q2xpZW50KCktPm1heCgpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVBy
b3hpbWl0eUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0Rl
dmljZVByb3hpbWl0eUNvbnRyb2xsZXIuaAppbmRleCA0MGRkZmI3ZjIxMGNmYTA0MWQ1ZDZmZGRh
NjBkMmYwYmEyNTVhYjA2Li44OWNmMDU0OWE2NDNkMzk2YWEzMDQzZjVkM2ZhOTYyOWUxZDk0YzZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9EZXZpY2VQcm94
aW1pdHlDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkv
RGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5oCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAg
ICBEZXZpY2VQcm94aW1pdHlDbGllbnQqIGRldmljZVByb3hpbWl0eUNsaWVudCgpOwogCiAgICAg
dmlydHVhbCBib29sIGhhc0xhc3REYXRhKCk7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50
PiBnZXRMYXN0RXZlbnQoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50
KCk7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0
aWMgRGV2aWNlUHJveGltaXR5Q29udHJvbGxlciogZnJvbShQYWdlKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IDY0NjU4NDAwMjBl
YTY1MzlkODBmNGI0M2MxN2E1NDJkOGQzYjcyNzEuLjQxZWIxMDllN2JlYmQ4YmVmMWI5NmU4NjQ1
MjYyNTU2MzkyNTFkYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXQuY3BwCkBAIC02NDgsNyArNjQ4LDcgQEAgdm9pZCBXZWJTb2NrZXQ6OmRpc3Bh
dGNoT3JRdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKICAgICBpZiAobV9zaG91bGREZWxh
eUV2ZW50RmlyaW5nKQogICAgICAgICBtX3BlbmRpbmdFdmVudHMuYXBwZW5kKFdURjo6bW92ZShl
dmVudCkpOwogICAgIGVsc2UKLSAgICAgICAgZGlzcGF0Y2hFdmVudChXVEY6Om1vdmUoZXZlbnQp
KTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAKaW5kZXggZGRlMTMzY2M3YzcwMTQ0ZTJk
MTAzNDRmYTc3MjMzYzkxZjA2NWZkNC4uYzkwNzQ2MDVhM2U2MDk1ODBmOTkyYWE2MWY3ZDVlM2Yw
NThkYjU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmNwcApAQCAtMTY2LDkgKzE2Niw5IEBA
IGJvb2wgRm9udExvYWRlcjo6Y2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0CiAgICAgcmV0
dXJuICFtX251bUxvYWRpbmdGcm9tQ1NTICYmICFtX251bUxvYWRpbmdGcm9tSlM7CiB9CiAKLXZv
aWQgRm9udExvYWRlcjo6c2NoZWR1bGVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3Zv
aWQgRm9udExvYWRlcjo6c2NoZWR1bGVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7Ci0gICAg
bV9wZW5kaW5nRXZlbnRzLmFwcGVuZChldmVudCk7CisgICAgbV9wZW5kaW5nRXZlbnRzLmFwcGVu
ZChXVEY6Om1vdmUoZXZlbnQpKTsKICAgICBpZiAoIW1fcGVuZGluZ0V2ZW50c1RpbWVyLmlzQWN0
aXZlKCkpCiAgICAgICAgIG1fcGVuZGluZ0V2ZW50c1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0K
QEAgLTE3OCwxNyArMTc4LDE3IEBAIHZvaWQgRm9udExvYWRlcjo6ZmlyZVBlbmRpbmdFdmVudHMo
KQogICAgIGlmIChtX3BlbmRpbmdFdmVudHMuaXNFbXB0eSgpICYmICFtX2xvYWRpbmdEb25lRXZl
bnQgJiYgIW1fY2FsbGJhY2tzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVj
dG9yPFJlZlB0cjxFdmVudD4+IHBlbmRpbmdFdmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+
IHBlbmRpbmdFdmVudHM7CiAgICAgbV9wZW5kaW5nRXZlbnRzLnN3YXAocGVuZGluZ0V2ZW50cyk7
CiAKICAgICBib29sIGxvYWRpbmdEb25lID0gZmFsc2U7CiAgICAgaWYgKG1fbG9hZGluZ0RvbmVF
dmVudCkgewotICAgICAgICBwZW5kaW5nRXZlbnRzLmFwcGVuZChtX2xvYWRpbmdEb25lRXZlbnQu
cmVsZWFzZSgpKTsKKyAgICAgICAgcGVuZGluZ0V2ZW50cy5hcHBlbmQobV9sb2FkaW5nRG9uZUV2
ZW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICBsb2FkaW5nRG9uZSA9IHRydWU7CiAgICAg
fQogCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHBlbmRpbmdFdmVudHMuc2l6
ZSgpOyArK2luZGV4KQotICAgICAgICBkaXNwYXRjaEV2ZW50KHBlbmRpbmdFdmVudHNbaW5kZXhd
LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50c1tpbmRleF0p
OwogCiAgICAgaWYgKGxvYWRpbmdEb25lICYmICFtX2NhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgVmVjdG9yPFJlZlB0cjxWb2lkQ2FsbGJhY2s+PiBjYWxsYmFja3M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRMb2FkZXIuaAppbmRleCBkZmM1MDFhN2ViZWUwOTVmMjEyNTI5ODdmY2IzYzZlMGRhYzRjZmI2
Li4zMzQ0NTk0ZTYxODkyMGMwOTdlZTAxYmVkZmM2MTFhYmE5MTA2ZDZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9G
b250TG9hZGVyLmgKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICBFdmVudFRhcmdldERh
dGEgbV9ldmVudFRhcmdldERhdGE7CiAgICAgdW5zaWduZWQgbV9udW1Mb2FkaW5nRnJvbUNTUzsK
ICAgICB1bnNpZ25lZCBtX251bUxvYWRpbmdGcm9tSlM7Ci0gICAgVmVjdG9yPFJlZlB0cjxFdmVu
dD4+IG1fcGVuZGluZ0V2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9wZW5kaW5nRXZl
bnRzOwogICAgIFZlY3RvcjxSZWZQdHI8Vm9pZENhbGxiYWNrPj4gbV9jYWxsYmFja3M7CiAgICAg
UmVmUHRyPEV2ZW50PiBtX2xvYWRpbmdEb25lRXZlbnQ7CiAgICAgVGltZXIgbV9wZW5kaW5nRXZl
bnRzVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5j
cHAKaW5kZXggMTE1MWJkMWViYTViZTRlOTY0OGU0ZjNhOWQwMjQ2MWRkYTM1ZGRiOC4uOTMwOTJi
Y2ZiN2ZkYjlmYTUxMjg3OWMzZjU0ODhhMDQ4NjA3YzEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmNwcApAQCAtNzIsNyArNzIsNyBAQCBib29sIERl
dmljZU1vdGlvbkNvbnRyb2xsZXI6Omhhc0xhc3REYXRhKCkKICAgICByZXR1cm4gZGV2aWNlTW90
aW9uQ2xpZW50KCktPmxhc3RNb3Rpb24oKTsKIH0KIAotUGFzc1JlZlB0cjxFdmVudD4gRGV2aWNl
TW90aW9uQ29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKK1JlZlB0cjxFdmVudD4gRGV2aWNlTW90
aW9uQ29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKIHsKICAgICByZXR1cm4gRGV2aWNlTW90aW9u
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGV2aWNlbW90aW9uRXZlbnQsIGRldmljZU1vdGlv
bkNsaWVudCgpLT5sYXN0TW90aW9uKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RldmljZU1vdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VN
b3Rpb25Db250cm9sbGVyLmgKaW5kZXggN2Q3MmQ1MTVjYzZkODEzZGMxZjM4YzYxOWU4OWUyY2Rj
ZmQ0YjlkYS4uMTRkYzc0NGI1YjQ0YWRhMDViM2YzZGIzYWRmODk4MWRjZjllZGEyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5oCkBAIC01Miw3ICs1Miw3
IEBAIHB1YmxpYzoKICAgICBEZXZpY2VNb3Rpb25DbGllbnQqIGRldmljZU1vdGlvbkNsaWVudCgp
OwogCiAgICAgdmlydHVhbCBib29sIGhhc0xhc3REYXRhKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29u
c3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgRGV2aWNlTW90aW9uQ29udHJv
bGxlciogZnJvbShQYWdlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNl
T3JpZW50YXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmll
bnRhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGFjZTNiMmIyMjk2M2U4MTI2MzliOTA4MmNhYjg0
NmQxMDE3Y2Q1MzYuLjM5NmJmOGNmNDA5NTg0ODcxZmUwNmVhOTczYzMwZDVkNmZkOGMyMzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIu
Y3BwCkBAIC03OSw3ICs3OSw3IEBAIGJvb2wgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpo
YXNMYXN0RGF0YSgpCiAgICAgcmV0dXJuIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCktPmxhc3RP
cmllbnRhdGlvbigpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50PiBEZXZpY2VPcmllbnRhdGlvbkNv
bnRyb2xsZXI6OmdldExhc3RFdmVudCgpCitSZWZQdHI8RXZlbnQ+IERldmljZU9yaWVudGF0aW9u
Q29udHJvbGxlcjo6Z2V0TGFzdEV2ZW50KCkKIHsKICAgICByZXR1cm4gRGV2aWNlT3JpZW50YXRp
b25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5kZXZpY2VvcmllbnRhdGlvbkV2ZW50LCBkZXZp
Y2VPcmllbnRhdGlvbkNsaWVudCgpLT5sYXN0T3JpZW50YXRpb24oKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgKaW5kZXggMTE4MzA2
MzQ4NjllOTA2ZTU4NzczNzRiYjczYTJmZGU0ZThiOTI4Ny4uYjAxZjhkMWE2MmIwNDc5MmIzNWY4
NDNhMmZmMDA4NTdhNTMxMTQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rldmlj
ZU9yaWVudGF0aW9uQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VP
cmllbnRhdGlvbkNvbnRyb2xsZXIuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXN1bWVVcGRhdGVzKCk7CiAjZWxzZQogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBSZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIG92ZXJy
aWRlOwogI2VuZGlmCiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDFlNDkzYjgzMDY1NzMxNzA1ODg5OTg1YWYyMmNm
NDFiZTk2N2NmNGEuLmY1ZmJlYjRkMDZlM2VmYTlmYTJiOWU4ODJiMzFiZGY3OGE3ZjNlODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDA1MCw3ICs0MDUwLDcgQEAgRXZlbnRMaXN0ZW5l
ciogRG9jdW1lbnQ6OmdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmUKICAgICByZXR1cm4gbV9kb21XaW5kb3ctPmdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnRUeXBlKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHRhcmdl
dCkKK3ZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQmIGV2ZW50LCBFdmVu
dFRhcmdldCogdGFyZ2V0KQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsK
ICAgICBpZiAoIW1fZG9tV2luZG93KQpAQCAtNDA2OCwyMSArNDA2OCwyMSBAQCB2b2lkIERvY3Vt
ZW50OjpkaXNwYXRjaFdpbmRvd0xvYWRFdmVudCgpCiAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRl
ci0+ZG9jdW1lbnREaWRGaW5pc2hMb2FkRXZlbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZW5x
dWV1ZVdpbmRvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBEb2N1bWVudDo6
ZW5xdWV1ZVdpbmRvd0V2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBldmVudC0+c2V0
VGFyZ2V0KG1fZG9tV2luZG93LmdldCgpKTsKLSAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50
KGV2ZW50KTsKKyAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVudCkp
OwogfQogCi12b2lkIERvY3VtZW50OjplbnF1ZXVlRG9jdW1lbnRFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKK3ZvaWQgRG9jdW1lbnQ6OmVucXVldWVEb2N1bWVudEV2ZW50KFJlZjxFdmVu
dD4mJiBldmVudCkKIHsKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIG1fZXZlbnRR
dWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQpOworICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQo
V1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmVucXVldWVPdmVyZmxvd0V2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZU92ZXJm
bG93RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVl
RXZlbnQoZXZlbnQpOworICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2
ZW50KSk7CiB9CiAKIFJlZlB0cjxFdmVudD4gRG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KGNvbnN0IFN0
cmluZyYgZXZlbnRUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTU5ODAsMjQgKzU5ODAsMjQg
QEAgdm9pZCBEb2N1bWVudDo6c2VuZFdpbGxSZXZlYWxFZGdlRXZlbnRzSWZOZWVkZWQoY29uc3Qg
SW50UG9pbnQmIG9sZFBvc2l0aW9uLCBjb24KICAgICAvLyBCb3R0b20gZWRnZS4KICAgICBpZiAo
bmV3UG9zaXRpb24ueSgpID49IHdpbGxSZXZlYWxCb3R0b21Ob3RpZmljYXRpb25Qb2ludCAmJiBu
ZXdQb3NpdGlvbi55KCkgPiBvbGRQb3NpdGlvbi55KCkKICAgICAgICAgJiYgd2lsbFJldmVhbEJv
dHRvbU5vdGlmaWNhdGlvblBvaW50ID49IG9sZFBvc2l0aW9uLnkoKSkgewotICAgICAgICBSZWZQ
dHI8RXZlbnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndl
YmtpdHdpbGxyZXZlYWxib3R0b21FdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgUmVmPEV2
ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3
aWxscmV2ZWFsYm90dG9tRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0
KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNl
KCkpOworICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFs
RXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNl
dFRhcmdldCh0YXJnZXQpOwotICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3
aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1
ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgLy8gVG9wIGVkZ2UuCiAgICAgaWYgKG5ld1Bvc2l0aW9uLnkoKSA8PSB3aWxsUmV2ZWFs
VG9wTm90aWZpY2F0aW9uUG9pbnQgJiYgbmV3UG9zaXRpb24ueSgpIDwgb2xkUG9zaXRpb24ueSgp
CiAgICAgICAgICYmIHdpbGxSZXZlYWxUb3BOb3RpZmljYXRpb25Qb2ludCA8PSBvbGRQb3NpdGlv
bi55KCkpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsdG9wRXZlbnQsIGZhbHNlLCBmYWxz
ZSk7CisgICAgICAgIFJlZjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkud2Via2l0d2lsbHJldmVhbHRvcEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAg
ICAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgICAgIGVucXVldWVXaW5kb3dFdmVudCh3aWxsUmV2
ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGVucXVldWVXaW5kb3dFdmVudChXVEY6
Om1vdmUod2lsbFJldmVhbEV2ZW50KSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgd2ls
bFJldmVhbEV2ZW50LT5zZXRUYXJnZXQodGFyZ2V0KTsKLSAgICAgICAgICAgIG1fZXZlbnRRdWV1
ZS5lbnF1ZXVlRXZlbnQod2lsbFJldmVhbEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBt
X2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtNjAwNywyNCArNjAwNywyNCBAQCB2b2lkIERvY3VtZW50Ojpz
ZW5kV2lsbFJldmVhbEVkZ2VFdmVudHNJZk5lZWRlZChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRp
b24sIGNvbgogICAgIC8vIFJpZ2h0IGVkZ2UuCiAgICAgaWYgKG5ld1Bvc2l0aW9uLngoKSA+PSB3
aWxsUmV2ZWFsUmlnaHROb3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkgPiBvbGRQ
b3NpdGlvbi54KCkKICAgICAgICAgJiYgd2lsbFJldmVhbFJpZ2h0Tm90aWZpY2F0aW9uUG9pbnQg
Pj0gb2xkUG9zaXRpb24ueCgpKSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudD4gd2lsbFJldmVhbEV2
ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZl
bnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIFJlZjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0g
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZh
bHNlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdp
bmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1
ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAg
ICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgp
KTsKKyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxS
ZXZlYWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTGVmdCBlZGdlLgogICAg
IGlmIChuZXdQb3NpdGlvbi54KCkgPD0gd2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Qb2ludCAm
JiBuZXdQb3NpdGlvbi54KCkgPCBvbGRQb3NpdGlvbi54KCkKICAgICAgICAgJiYgd2lsbFJldmVh
bExlZnROb3RpZmljYXRpb25Qb2ludCA8PSBvbGRQb3NpdGlvbi54KCkpIHsKLSAgICAgICAgUmVm
UHRyPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53
ZWJraXR3aWxscmV2ZWFsbGVmdEV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBSZWY8RXZl
bnQ+IHdpbGxSZXZlYWxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdp
bGxyZXZlYWxsZWZ0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQot
ICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkp
OworICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZl
bnQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRh
cmdldCh0YXJnZXQpOwotICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxs
UmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVl
RXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogI2Vs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMDNkMGI0NWNkNzE0OTUxZTdkNWFmMDQ0YzllZmI5
YWFjNjFjNTE2OS4uYjVmZjNkNGVjMzcxYzIxZjYwZTc2NGIyZDgxNTM5ZjBlMjdmNDA1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKQEAgLTc4OCw3ICs3ODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKTsKICAgICB2b2lkIHNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwog
ICAgIEV2ZW50TGlzdGVuZXIqIGdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0
Y2hXaW5kb3dFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4g
PSBudWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoV2luZG93RXZlbnQo
RXZlbnQmLCBFdmVudFRhcmdldCogPSBudWxscHRyKTsKICAgICB2b2lkIGRpc3BhdGNoV2luZG93
TG9hZEV2ZW50KCk7CiAKICAgICBSZWZQdHI8RXZlbnQ+IGNyZWF0ZUV2ZW50KGNvbnN0IFN0cmlu
ZyYgZXZlbnRUeXBlLCBFeGNlcHRpb25Db2RlJik7CkBAIC0xMDkyLDkgKzEwOTIsOSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0IG92ZXJyaWRlIGZp
bmFsOwogICAgIHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgZW5xdWV1ZVdpbmRvd0V2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2b2lkIGVucXVldWVEb2N1bWVudEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KTsKLSAgICB2b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVucXVldWVXaW5kb3dFdmVudChSZWY8RXZlbnQ+JiYpOwor
ICAgIHZvaWQgZW5xdWV1ZURvY3VtZW50RXZlbnQoUmVmPEV2ZW50PiYmKTsKKyAgICB2b2lkIGVu
cXVldWVPdmVyZmxvd0V2ZW50KFJlZjxFdmVudD4mJik7CiAgICAgdm9pZCBlbnF1ZXVlUGFnZXNo
b3dFdmVudChQYWdlc2hvd0V2ZW50UGVyc2lzdGVuY2UpOwogICAgIHZvaWQgZW5xdWV1ZUhhc2hj
aGFuZ2VFdmVudChjb25zdCBTdHJpbmcmIG9sZFVSTCwgY29uc3QgU3RyaW5nJiBuZXdVUkwpOwog
ICAgIHZvaWQgZW5xdWV1ZVBvcHN0YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHN0YXRlT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudEV2ZW50UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1
ZS5jcHAKaW5kZXggYTdiYjVkZmUyY2FmODQ4ZDRmNWY5MmUyODFjOTczMmU0OGEyZTlmOS4uOGVh
NWVjMDM3NGJkMTM3ODg3MWQyYTYyZDk0YTliOTc4MjBiYzZjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5jcHAKQEAgLTY4LDE1ICs2OCwxNSBAQCBEb2N1bWVudEV2
ZW50UXVldWU6On5Eb2N1bWVudEV2ZW50UXVldWUoKQogewogfQogCi1ib29sIERvY3VtZW50RXZl
bnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBEb2N1
bWVudEV2ZW50UXVldWU6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAg
QVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250
YWlucyhldmVudC5nZXQoKSkpOworICAgIEFTU0VSVCghbV9xdWV1ZWRFdmVudHMuY29udGFpbnMo
ZXZlbnQucHRyKCkpKTsKIAogICAgIGlmIChtX2lzQ2xvc2VkKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBtX3F1ZXVlZEV2ZW50cy5hZGQoZXZlbnQpOworICAgIG1fcXVldWVkRXZlbnRz
LmFkZChldmVudC5wdHIoKSk7CiAgICAgaWYgKCFtX3BlbmRpbmdFdmVudFRpbWVyLT5pc0FjdGl2
ZSgpKQogICAgICAgICBtX3BlbmRpbmdFdmVudFRpbWVyLT5zdGFydE9uZVNob3QoMCk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC05OSw5ICs5OSw5IEBAIHZvaWQgRG9jdW1lbnRFdmVudFF1ZXVlOjpl
bnF1ZXVlT3JEaXNwYXRjaFNjcm9sbEV2ZW50KE5vZGUmIHRhcmdldCkKICAgICBib29sIGJ1YmJs
ZXMgPSB0YXJnZXQuaXNEb2N1bWVudE5vZGUoKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBmYWxz
ZTsKIAotICAgIFJlZlB0cjxFdmVudD4gc2Nyb2xsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5zY3JvbGxFdmVudCwgYnViYmxlcywgY2FuY2VsYWJsZSk7CisgICAgUmVmPEV2ZW50
PiBzY3JvbGxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBi
dWJibGVzLCBjYW5jZWxhYmxlKTsKICAgICBzY3JvbGxFdmVudC0+c2V0VGFyZ2V0KCZ0YXJnZXQp
OwotICAgIGVucXVldWVFdmVudChzY3JvbGxFdmVudC5yZWxlYXNlKCkpOworICAgIGVucXVldWVF
dmVudChXVEY6Om1vdmUoc2Nyb2xsRXZlbnQpKTsKIH0KIAogYm9vbCBEb2N1bWVudEV2ZW50UXVl
dWU6OmNhbmNlbEV2ZW50KEV2ZW50JiBldmVudCkKQEAgLTE0Niw5ICsxNDYsOSBAQCB2b2lkIERv
Y3VtZW50RXZlbnRRdWV1ZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiAgICAgLy8gV2h5
IGRvIHdlIGhhdmUgdGhpcyBzcGVjaWFsIGNhc2UgaGVyZSBpbnN0ZWFkIG9mIGEgdmlydHVhbCBm
dW5jdGlvbiBvbiBFdmVudFRhcmdldD8KICAgICBFdmVudFRhcmdldCYgZXZlbnRUYXJnZXQgPSAq
ZXZlbnQudGFyZ2V0KCk7CiAgICAgaWYgKERPTVdpbmRvdyogd2luZG93ID0gZXZlbnRUYXJnZXQu
dG9ET01XaW5kb3coKSkKLSAgICAgICAgd2luZG93LT5kaXNwYXRjaEV2ZW50KCZldmVudCwgMCk7
CisgICAgICAgIHdpbmRvdy0+ZGlzcGF0Y2hFdmVudChldmVudCwgbnVsbHB0cik7CiAgICAgZWxz
ZQotICAgICAgICBldmVudFRhcmdldC5kaXNwYXRjaEV2ZW50KCZldmVudCk7CisgICAgICAgIGV2
ZW50VGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRFdmVudFF1ZXVlLmgKaW5kZXggOTgyNWVkMmY2MDdhNDJhODdiNTExMzNhOWI4MTVl
NTVlZjIzMGVkYy4uN2QxMTFkMmQ0YjViYTY5YzhiM2U3YzIyZjg3NDRjZTc5Njc1M2I5ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuaApAQCAtNDQsNyArNDQsNyBAQCBw
dWJsaWM6CiAgICAgZXhwbGljaXQgRG9jdW1lbnRFdmVudFF1ZXVlKERvY3VtZW50Jik7CiAgICAg
dmlydHVhbCB+RG9jdW1lbnRFdmVudFF1ZXVlKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1
ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5x
dWV1ZUV2ZW50KFJlZjxFdmVudD4mJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGNhbmNl
bEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3ZlcnJp
ZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA5OGE2MTBmZWQxYzZhOTU0ZmExNDI3NGVm
OWNhZTJjZjhhNzM5ODNjLi4zZDczZGVhNjhmZjRkMzU4Y2MxMDhiZGJmY2JhNTM3NTM4NzUzM2Ex
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBFbGVtZW50
OjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2
ZW50LCBjb25zdAogICAgIGlmIChpc0ZvcmNlRXZlbnQocGxhdGZvcm1FdmVudCkgJiYgIWRvY3Vt
ZW50KCkuaGFzTGlzdGVuZXJUeXBlRm9yRXZlbnRUeXBlKHBsYXRmb3JtRXZlbnQudHlwZSgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRXZl
bnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3
KCksIHBsYXRmb3JtRXZlbnQsIGRldGFpbCwgcmVsYXRlZFRhcmdldCk7CisgICAgUmVmPE1vdXNl
RXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBkb2N1bWVu
dCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtRXZlbnQsIGRldGFpbCwgcmVsYXRlZFRhcmdldCk7
CiAKICAgICBpZiAobW91c2VFdmVudC0+dHlwZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7IC8vIFNob3VsZG4ndCBoYXBwZW4uCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBFbGVt
ZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9y
bUV2ZW50LCBjb25zdAogICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IElmIGl0J3MgYSBkb3VibGUg
Y2xpY2sgZXZlbnQsIHdlIGFsc28gc2VuZCB0aGUgZGJsY2xpY2sgZXZlbnQuIFRoaXMgaXMgbm90
IHBhcnQKICAgICAgICAgLy8gb2YgdGhlIERPTSBzcGVjcywgYnV0IGlzIHVzZWQgZm9yIGNvbXBh
dGliaWxpdHkgd2l0aCB0aGUgb25kYmxjbGljaz0iIiBhdHRyaWJ1dGUuIFRoaXMgaXMgdHJlYXRl
ZAogICAgICAgICAvLyBhcyBhIHNlcGFyYXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQg
YnJvd3NlcnMgbGlrZSBGaXJlZm94LCBhbmQgc28gd2UgZG8gdGhlIHNhbWUuCi0gICAgICAgIFJl
ZlB0cjxNb3VzZUV2ZW50PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7
CisgICAgICAgIFJlZjxNb3VzZUV2ZW50PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6
Y3JlYXRlKCk7CiAgICAgICAgIGRvdWJsZUNsaWNrRXZlbnQtPmluaXRNb3VzZUV2ZW50KGV2ZW50
TmFtZXMoKS5kYmxjbGlja0V2ZW50LAogICAgICAgICAgICAgbW91c2VFdmVudC0+YnViYmxlcygp
LCBtb3VzZUV2ZW50LT5jYW5jZWxhYmxlKCksIG1vdXNlRXZlbnQtPnZpZXcoKSwgbW91c2VFdmVu
dC0+ZGV0YWlsKCksCiAgICAgICAgICAgICBtb3VzZUV2ZW50LT5zY3JlZW5YKCksIG1vdXNlRXZl
bnQtPnNjcmVlblkoKSwgbW91c2VFdmVudC0+Y2xpZW50WCgpLCBtb3VzZUV2ZW50LT5jbGllbnRZ
KCksCkBAIC0yODUsNyArMjg1LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogCiBib29sIEVs
ZW1lbnQ6OmRpc3BhdGNoV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50
KQogewotICAgIFJlZlB0cjxXaGVlbEV2ZW50PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVudDo6Y3Jl
YXRlKGV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOworICAgIFJlZjxXaGVlbEV2ZW50
PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVudDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVudCgpLmRlZmF1
bHRWaWV3KCkpOwogCiAgICAgLy8gRXZlbnRzIHdpdGggbm8gZGVsdGFzIGFyZSBpbXBvcnRhbnQg
YmVjYXVzZSB0aGV5IGNvbnZleSBwbGF0Zm9ybSBpbmZvcm1hdGlvbiBhYm91dCBzY3JvbGwgZ2Vz
dHVyZXMKICAgICAvLyBhbmQgbW9tZW50dW0gYmVnaW5uaW5nIG9yIGVuZGluZy4gSG93ZXZlciwg
dGhvc2UgZXZlbnRzIHNob3VsZCBub3QgYmUgc2VudCB0byB0aGUgRE9NIHNpbmNlIHNvbWUKQEAg
LTMwMCw5ICszMDAsOSBAQCBib29sIEVsZW1lbnQ6OmRpc3BhdGNoV2hlZWxFdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoS2V5RXZl
bnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBwbGF0Zm9ybUV2ZW50KQogewotICAgIFJl
ZlB0cjxLZXlib2FyZEV2ZW50PiBldmVudCA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShwbGF0Zm9y
bUV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOworICAgIFJlZjxLZXlib2FyZEV2ZW50
PiBldmVudCA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgp
LmRlZmF1bHRWaWV3KCkpOwogICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1l
KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5ldmVudEhhbmRsZXIoKS5hY2Nlc3NpYmlsaXR5UHJl
dmVudHNFdmVudFByb3BvZ2F0aW9uKGV2ZW50LmdldCgpKSkKKyAgICAgICAgaWYgKGZyYW1lLT5l
dmVudEhhbmRsZXIoKS5hY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKGV2ZW50
KSkKICAgICAgICAgICAgIGV2ZW50LT5zdG9wUHJvcGFnYXRpb24oKTsKICAgICB9CiAgICAgcmV0
dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVudCkgJiYgIWV2ZW50
LT5kZWZhdWx0SGFuZGxlZCgpOwpAQCAtMjMyNCw3ICsyMzI0LDcgQEAgYm9vbCBFbGVtZW50Ojpk
aXNwYXRjaE1vdXNlRm9yY2VXaWxsQmVnaW4oKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0
S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5
cGUsIDEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZv
cmNlQXRDbGljayk7Ci0gICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VXaWxsQmVnaW5F
dmVudCA9ICBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2V3
aWxsYmVnaW5FdmVudCwgZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNlRXZl
bnQsIDAsIG51bGxwdHIpOworICAgIFJlZjxNb3VzZUV2ZW50PiBtb3VzZUZvcmNlV2lsbEJlZ2lu
RXZlbnQgPSAgTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNl
d2lsbGJlZ2luRXZlbnQsIGRvY3VtZW50KCkuZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm1Nb3VzZUV2
ZW50LCAwLCBudWxscHRyKTsKICAgICBtb3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQtPnNldFRhcmdl
dCh0aGlzKTsKICAgICBkaXNwYXRjaEV2ZW50KG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnQuY3BwCmluZGV4IDU5NmRkODU4YTA0YzM2M2E3NWU0OGVhY2Y4YTc0YTVhOGQ2
ZWU4NTUuLjVjMWU2ZmU3MDEyNzhjZGU1YWU2ZTAzZWQ4NWE1ZTI3NGQ3OWEwYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50LmNwcApAQCAtMTYyLDEyICsxNjIsMTIgQEAgUGFzc1JlZlB0cjxFdmVudD4gRXZlbnQ6
OmNsb25lRm9yKEhUTUxJRnJhbWVFbGVtZW50KikgY29uc3QKICAgICByZXR1cm4gRXZlbnQ6OmNy
ZWF0ZSh0eXBlKCksIGJ1YmJsZXMoKSwgY2FuY2VsYWJsZSgpKTsKIH0KIAotdm9pZCBFdmVudDo6
c2V0VGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRXZlbnQ6OnNl
dFRhcmdldChSZWZQdHI8RXZlbnRUYXJnZXQ+JiYgdGFyZ2V0KQogewogICAgIGlmIChtX3Rhcmdl
dCA9PSB0YXJnZXQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdGFyZ2V0ID0gdGFyZ2V0Owor
ICAgIG1fdGFyZ2V0ID0gV1RGOjptb3ZlKHRhcmdldCk7CiAgICAgaWYgKG1fdGFyZ2V0KQogICAg
ICAgICByZWNlaXZlZFRhcmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAppbmRleCAwOWU3NzhkNTEzNmZm
MGZjYTg2ZTRkYzI5ZmViYWFlODljMjE3ZjBjLi4wY2NjZTEwODg1Mzg4NTJlMzFkNGYzNDIxNmNl
Y2QxOGU4OTQyMzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKSB7IG1fdHlwZSA9IHR5
cGU7IH0KICAgICAKICAgICBFdmVudFRhcmdldCogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90
YXJnZXQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0
Pik7CisgICAgdm9pZCBzZXRUYXJnZXQoUmVmUHRyPEV2ZW50VGFyZ2V0PiYmKTsKIAogICAgIEV2
ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0
OyB9CiAgICAgdm9pZCBzZXRDdXJyZW50VGFyZ2V0KEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0
KSB7IG1fY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggMmJkYzM1MGI1YTVmNzYzMzBiMmQ3ZGI3NjgyYjc2Zjg4
NjUzYWEyZC4uMzQxODQ3ZmQzODAyODhmMzAwZTBkODNiNmIwNDNkYWJlNTIxNzQ5NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTcwLDkgKzcwLDkgQEAgYm9vbCBX
aW5kb3dFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBp
ZiAoIW1fd2luZG93KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBldmVudC5zZXRUYXJn
ZXQobV90YXJnZXQuZ2V0KCkpOworICAgIGV2ZW50LnNldFRhcmdldChtX3RhcmdldC5jb3B5UmVm
KCkpOwogICAgIGV2ZW50LnNldEN1cnJlbnRUYXJnZXQobV93aW5kb3cuZ2V0KCkpOwotICAgIG1f
d2luZG93LT5maXJlRXZlbnRMaXN0ZW5lcnMoJmV2ZW50KTsKKyAgICBtX3dpbmRvdy0+ZmlyZUV2
ZW50TGlzdGVuZXJzKGV2ZW50KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjAxLDEwICsy
MDEsMTAgQEAgaW5saW5lIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRS
dWxlcyhOb2RlJiByZWZlcmVuY2VOb2RlKQogICAgIHJldHVybiAmcmVmZXJlbmNlTm9kZTsKIH0K
IAotdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQoTm9kZSYgbm9kZSwg
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hT
Y29wZWRFdmVudChOb2RlJiBub2RlLCBFdmVudCYgZXZlbnQpCiB7CiAgICAgLy8gV2UgbmVlZCB0
byBzZXQgdGhlIHRhcmdldCBoZXJlIGJlY2F1c2UgaXQgY2FuIGdvIGF3YXkgYnkgdGhlIHRpbWUg
d2UgYWN0dWFsbHkgZmlyZSB0aGUgZXZlbnQuCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRh
cmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KGV2
ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpKTsKICAgICBTY29wZWRFdmVudFF1
ZXVlOjpzaW5nbGV0b24oKS5lbnF1ZXVlRXZlbnQoZXZlbnQpOwogfQogCkBAIC0zMDAsMjMgKzMw
MCwxOSBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaEV2ZW50SW5ET00oRXZlbnQmIGV2ZW50LCBjb25z
dCBFdmVudFBhdGgmIHBhdGgsIFdpbmRvd0V2ZW50QwogICAgIH0KIH0KIAotYm9vbCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogb3JpZ2luLCBQYXNzUmVmUHRyPEV2ZW50PiBw
cnBFdmVudCkKK2Jvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG9yaWdp
biwgRXZlbnQmIGV2ZW50KQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCFOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsK
LSAgICBpZiAoIXBycEV2ZW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIEFTU0VSVChv
cmlnaW4pOwogICAgIFJlZlB0cjxOb2RlPiBub2RlKG9yaWdpbik7Ci0gICAgUmVmUHRyPEV2ZW50
PiBldmVudChwcnBFdmVudCk7CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IG5vZGUtPmRv
Y3VtZW50KCkudmlldygpOwotICAgIEV2ZW50UGF0aCBldmVudFBhdGgoKm5vZGUsICpldmVudCk7
CisgICAgRXZlbnRQYXRoIGV2ZW50UGF0aCgqbm9kZSwgZXZlbnQpOwogCi0gICAgaWYgKEV2ZW50
VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKKyAgICBpZiAo
RXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0KCkpCiAgICAg
ICAgIGV2ZW50UGF0aC5zZXRSZWxhdGVkVGFyZ2V0KCpub2RlLCAqcmVsYXRlZFRhcmdldCk7CiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoaXM8VG91
Y2hFdmVudD4oKmV2ZW50KSkgewotICAgICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExp
c3RzKGRvd25jYXN0PFRvdWNoRXZlbnQ+KCpldmVudCkpKQorICAgIGlmIChpczxUb3VjaEV2ZW50
PihldmVudCkpIHsKKyAgICAgICAgaWYgKCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cyhkb3du
Y2FzdDxUb3VjaEV2ZW50PihldmVudCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogI2VuZGlmCkBAIC0zMjQsOCArMzIwLDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoRXZlbnQoTm9kZSogb3JpZ2luLCBQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBD
aGlsZE5vZGVzTGF6eVNuYXBzaG90Ojp0YWtlQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCgpOwogCiAg
ICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVz
KCpub2RlKTsKLSAgICBldmVudC0+c2V0VGFyZ2V0KHRhcmdldCk7Ci0gICAgaWYgKCFldmVudC0+
dGFyZ2V0KCkpCisgICAgZXZlbnQuc2V0VGFyZ2V0KHRhcmdldCk7CisgICAgaWYgKCFldmVudC50
YXJnZXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTighTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hG
b3JiaWRkZW4oKSk7CkBAIC0zMzQsMzAgKzMzMCwzMCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hFdmVudChOb2RlKiBvcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQog
CiAgICAgSW5wdXRFbGVtZW50Q2xpY2tTdGF0ZSBjbGlja0hhbmRsaW5nU3RhdGU7CiAgICAgaWYg
KGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKm5vZGUpLndpbGxEaXNwYXRjaEV2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0
YXRlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxEaXNw
YXRjaEV2ZW50KGV2ZW50LCBjbGlja0hhbmRsaW5nU3RhdGUpOwogCi0gICAgaWYgKCFldmVudC0+
cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2ZW50UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIGRp
c3BhdGNoRXZlbnRJbkRPTSgqZXZlbnQsIGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsK
KyAgICBpZiAoIWV2ZW50LnByb3BhZ2F0aW9uU3RvcHBlZCgpICYmICFldmVudFBhdGguaXNFbXB0
eSgpKQorICAgICAgICBkaXNwYXRjaEV2ZW50SW5ET00oZXZlbnQsIGV2ZW50UGF0aCwgd2luZG93
RXZlbnRDb250ZXh0KTsKIAotICAgIGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0
aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxs
cHRyKTsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKKyAgICBldmVudC5zZXRUYXJnZXQo
ZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsKKyAgICBldmVudC5zZXRD
dXJyZW50VGFyZ2V0KG51bGxwdHIpOworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoMCk7CiAKICAg
ICBpZiAoY2xpY2tIYW5kbGluZ1N0YXRlLnN0YXRlZnVsKQotICAgICAgICBkb3duY2FzdDxIVE1M
SW5wdXRFbGVtZW50Pigqbm9kZSkuZGlkRGlzcGF0Y2hDbGlja0V2ZW50KCpldmVudCwgY2xpY2tI
YW5kbGluZ1N0YXRlKTsKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUp
LmRpZERpc3BhdGNoQ2xpY2tFdmVudChldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAg
IC8vIENhbGwgZGVmYXVsdCBldmVudCBoYW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUg
YSBjb25jZXB0IG9mIHByZXZlbnRpbmcKICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0
YWlsIG9mIHdoaWNoIGhhbmRsZXJzIGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBp
bXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFl
dmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAg
ICAgICAgY2FsbERlZmF1bHRFdmVudEhhbmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKCpldmVudCwg
ZXZlbnRQYXRoKTsKKyAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZlbnQu
ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgY2FsbERlZmF1bHRFdmVudEhhbmRsZXJzSW5UaGVC
dWJibGluZ09yZGVyKGV2ZW50LCBldmVudFBhdGgpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgYWZ0
ZXIgZXZlbnQgZGlzcGF0Y2gsIHRoZSBldmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCiAgICAg
Ly8gb3V0ZXJtb3N0IHNoYWRvdyBET00gYm91bmRhcnkuCi0gICAgZXZlbnQtPnNldFRhcmdldCh3
aW5kb3dFdmVudENvbnRleHQudGFyZ2V0KCkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0
KG51bGxwdHIpOworICAgIGV2ZW50LnNldFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFyZ2V0
KCkpOworICAgIGV2ZW50LnNldEN1cnJlbnRUYXJnZXQobnVsbHB0cik7CiAKLSAgICByZXR1cm4g
IWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJl
dmVudGVkKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRFdmVudENyb3NzU2hhZG93
Qm91bmRhcnkoRXZlbnQmIGV2ZW50LCBTaGFkb3dSb290JiBzaGFkb3dSb290LCBFdmVudFRhcmdl
dCYgdGFyZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDY0MDQwZGQz
Y2M0YmU4N2JlYjYxOGMyMDljZjQ5ZjIyYzQwNjU0ZDIuLmYxODlkN2E0ZGYyYjg1ZDI3YWY3NDVj
ZmFlM2FhZTQ2ODBkYTkzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAg
LTM4LDExICszOCwxMSBAQCBjbGFzcyBOb2RlOwogCiBuYW1lc3BhY2UgRXZlbnREaXNwYXRjaGVy
IHsKIAotYm9vbCBkaXNwYXRjaEV2ZW50KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50Pik7Ci12b2lk
IGRpc3BhdGNoU2NvcGVkRXZlbnQoTm9kZSYsIFBhc3NSZWZQdHI8RXZlbnQ+KTsKK2Jvb2wgZGlz
cGF0Y2hFdmVudChOb2RlKiwgRXZlbnQmKTsKK3ZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2Rl
JiwgRXZlbnQmKTsKIHZvaWQgZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhFbGVtZW50KiwgRXZlbnQq
IHVuZGVybHlpbmdFdmVudCwgU2ltdWxhdGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucywgU2ltdWxh
dGVkQ2xpY2tWaXN1YWxPcHRpb25zKTsKIAotfTsKK30KIAogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVl
dWUuaAppbmRleCBlOTkzNGM1MDhjMmYxNjQ5ZDU0YjgwYjY1OGZmNmRjYmI0MTdlMWY3Li5hYzM5
ZWM2MTdhZjhlZDQ2MmE1MWNkZWU3YTE1ZDFmNDg4Mjg0YjFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1
ZXVlLmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudFF1ZXVlIHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FdmVudFF1ZXVlKCkgeyB9Ci0gICAgdmlydHVhbCBib29s
IGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBl
bnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2
ZW50KEV2ZW50JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsgLy8gRGlzY2Fy
ZCBhY2N1bXVsYXRlZCBldmVudHMgYW5kIGFsbCBmdXR1cmUgZXZlbnRzLiBObyBldmVudHMgd2ls
bCBiZSBkaXNwYXRjaGVkIGFmdGVyIHRoaXMuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5j
cHAKaW5kZXggNzYyYTZhNTI4ZjM1MTM0MzNjZGJkY2Y5NDBhNmU2Mjk3OTczNjI1Yi4uZmZkZGVh
OTQ3NWU2OTlhZWVkZGEyNGJiZmExYThkNDFlOTQ2M2IwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuY3BwCkBAIC0xMzQsNyArMTM0LDcgQEAgYm9vbCBFdmVudFRhcmdldDo6Y2xlYXJBdHRy
aWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogICAgIHJl
dHVybiByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTsKIH0K
IAotYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KEV2
ZW50KiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFldmVudCkgewogICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKQEAgLTE0OSwxNiArMTQ5LDE5IEBAIGJvb2wgRXZlbnRUYXJn
ZXQ6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgcmV0dXJuIGRp
c3BhdGNoRXZlbnQoKmV2ZW50KTsKIH0KIAotYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZl
bnQoRXZlbnQmIGV2ZW50KQogewotICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgZXZl
bnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkFUX1RBUkdFVCk7Ci0gICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZmlyZUV2ZW50TGlz
dGVuZXJzKGV2ZW50LmdldCgpKTsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKKyAgICBB
U1NFUlQoZXZlbnQuaXNJbml0aWFsaXplZCgpKTsKKyAgICBBU1NFUlQoIWV2ZW50LmlzQmVpbmdE
aXNwYXRjaGVkKCkpOworCisgICAgZXZlbnQuc2V0VGFyZ2V0KHRoaXMpOworICAgIGV2ZW50LnNl
dEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6QVRf
VEFSR0VUKTsKKyAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBmaXJlRXZlbnRMaXN0ZW5lcnMo
ZXZlbnQpOworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoMCk7CiAgICAgcmV0dXJuIGRlZmF1bHRQ
cmV2ZW50ZWQ7CiB9CiAKQEAgLTE2NiwzMCArMTY5LDMwIEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnVu
Y2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKQogewogfQogCi1zdGF0aWMgY29uc3QgQXRv
bWljU3RyaW5nJiBsZWdhY3lUeXBlKGNvbnN0IEV2ZW50KiBldmVudCkKK3N0YXRpYyBjb25zdCBB
dG9taWNTdHJpbmcmIGxlZ2FjeVR5cGUoY29uc3QgRXZlbnQmIGV2ZW50KQogewotICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCkKKyAgICBpZiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCkKICAgICAgICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25FbmRFdmVudDsKIAotICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25zdGFydEV2ZW50KQorICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQpCiAgICAg
ICAgIHJldHVybiBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudDsKIAotICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25pdGVyYXRpb25FdmVu
dCkKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25pdGVyYXRp
b25FdmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVy
YXRpb25FdmVudDsKIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50cmFu
c2l0aW9uZW5kRXZlbnQpCisgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudHJh
bnNpdGlvbmVuZEV2ZW50KQogICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdFRyYW5z
aXRpb25FbmRFdmVudDsKIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53
aGVlbEV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZl
bnQpCiAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50OwogCiAgICAg
cmV0dXJuIGVtcHR5QXRvbTsKIH0KIAotYm9vbCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVu
ZXJzKEV2ZW50KiBldmVudCkKK2Jvb2wgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhF
dmVudCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIU5v
RXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAg
IEFTU0VSVChldmVudCAmJiBldmVudC0+aXNJbml0aWFsaXplZCgpKTsKKyAgICBBU1NFUlQoZXZl
bnQuaXNJbml0aWFsaXplZCgpKTsKIAogICAgIEV2ZW50VGFyZ2V0RGF0YSogZCA9IGV2ZW50VGFy
Z2V0RGF0YSgpOwogICAgIGlmICghZCkKQEAgLTIwMCwyMSArMjAzLDIxIEBAIGJvb2wgRXZlbnRU
YXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCogZXZlbnQpCiAgICAgaWYgKCFsZWdhY3lU
eXBlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIGxlZ2FjeUxpc3RlbmVyc1ZlY3RvciA9IGQtPmV2
ZW50TGlzdGVuZXJNYXAuZmluZChsZWdhY3lUeXBlTmFtZSk7CiAKLSAgICBFdmVudExpc3RlbmVy
VmVjdG9yKiBsaXN0ZW5lcnNWZWN0b3IgPSBkLT5ldmVudExpc3RlbmVyTWFwLmZpbmQoZXZlbnQt
PnR5cGUoKSk7CisgICAgRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJzVmVjdG9yID0gZC0+
ZXZlbnRMaXN0ZW5lck1hcC5maW5kKGV2ZW50LnR5cGUoKSk7CiAKICAgICBpZiAobGlzdGVuZXJz
VmVjdG9yKQogICAgICAgICBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQsIGQsICpsaXN0ZW5lcnNW
ZWN0b3IpOwogICAgIGVsc2UgaWYgKGxlZ2FjeUxpc3RlbmVyc1ZlY3RvcikgewotICAgICAgICBB
dG9taWNTdHJpbmcgdHlwZU5hbWUgPSBldmVudC0+dHlwZSgpOwotICAgICAgICBldmVudC0+c2V0
VHlwZShsZWdhY3lUeXBlTmFtZSk7CisgICAgICAgIEF0b21pY1N0cmluZyB0eXBlTmFtZSA9IGV2
ZW50LnR5cGUoKTsKKyAgICAgICAgZXZlbnQuc2V0VHlwZShsZWdhY3lUeXBlTmFtZSk7CiAgICAg
ICAgIGZpcmVFdmVudExpc3RlbmVycyhldmVudCwgZCwgKmxlZ2FjeUxpc3RlbmVyc1ZlY3Rvcik7
Ci0gICAgICAgIGV2ZW50LT5zZXRUeXBlKHR5cGVOYW1lKTsKKyAgICAgICAgZXZlbnQuc2V0VHlw
ZSh0eXBlTmFtZSk7CiAgICAgfQogCi0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRl
ZCgpOworICAgIHJldHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCgpOwogfQogICAgICAgICAK
LXZvaWQgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCogZXZlbnQsIEV2ZW50
VGFyZ2V0RGF0YSogZCwgRXZlbnRMaXN0ZW5lclZlY3RvciYgZW50cnkpCit2b2lkIEV2ZW50VGFy
Z2V0OjpmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQs
IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGVudHJ5KQogewogICAgIFJlZjxFdmVudFRhcmdldD4gcHJv
dGVjdCgqdGhpcyk7CiAKQEAgLTIyNiwzMiArMjI5LDMyIEBAIHZvaWQgRXZlbnRUYXJnZXQ6OmZp
cmVFdmVudExpc3RlbmVycyhFdmVudCogZXZlbnQsIEV2ZW50VGFyZ2V0RGF0YSogZCwgRXZlbnRM
aXN0CiAgICAgc2l6ZV90IHNpemUgPSBlbnRyeS5zaXplKCk7CiAgICAgaWYgKCFkLT5maXJpbmdF
dmVudEl0ZXJhdG9ycykKICAgICAgICAgZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMgPSBzdGQ6Om1h
a2VfdW5pcXVlPEZpcmluZ0V2ZW50SXRlcmF0b3JWZWN0b3I+KCk7Ci0gICAgZC0+ZmlyaW5nRXZl
bnRJdGVyYXRvcnMtPmFwcGVuZChGaXJpbmdFdmVudEl0ZXJhdG9yKGV2ZW50LT50eXBlKCksIGks
IHNpemUpKTsKKyAgICBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+YXBwZW5kKEZpcmluZ0V2ZW50
SXRlcmF0b3IoZXZlbnQudHlwZSgpLCBpLCBzaXplKSk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG51bGxwdHI7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
IHdpbGxEaXNwYXRjaEV2ZW50Q29va2llOwogICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkp
IHsKICAgICAgICAgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCk7Ci0gICAg
ICAgIHdpbGxEaXNwYXRjaEV2ZW50Q29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsRGlzcGF0Y2hFdmVudCgqZG9jdW1lbnQsICpldmVudCwgc2l6ZSA+IDApOworICAgICAgICB3
aWxsRGlzcGF0Y2hFdmVudENvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERp
c3BhdGNoRXZlbnQoKmRvY3VtZW50LCBldmVudCwgc2l6ZSA+IDApOwogICAgIH0KIAogICAgIGZv
ciAoOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBy
ZWdpc3RlcmVkTGlzdGVuZXIgPSBlbnRyeVtpXTsKLSAgICAgICAgaWYgKGV2ZW50LT5ldmVudFBo
YXNlKCkgPT0gRXZlbnQ6OkNBUFRVUklOR19QSEFTRSAmJiAhcmVnaXN0ZXJlZExpc3RlbmVyLnVz
ZUNhcHR1cmUpCisgICAgICAgIGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkNBUFRV
UklOR19QSEFTRSAmJiAhcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGV2ZW50LT5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJV
QkJMSU5HX1BIQVNFICYmIHJlZ2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQorICAgICAgICBp
ZiAoZXZlbnQuZXZlbnRQaGFzZSgpID09IEV2ZW50OjpCVUJCTElOR19QSEFTRSAmJiByZWdpc3Rl
cmVkTGlzdGVuZXIudXNlQ2FwdHVyZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IC8vIElmIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHdlIGp1c3Qg
YnJlYWsgb3V0IGltbWVkaWF0ZWx5LCB3aXRob3V0CiAgICAgICAgIC8vIGhhbmRsaW5nIGFueSBt
b3JlIGV2ZW50cyBvbiB0aGlzIHRhcmdldC4KLSAgICAgICAgaWYgKGV2ZW50LT5pbW1lZGlhdGVQ
cm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICAgICAgaWYgKGV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0
aW9uU3RvcHBlZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bEhhbmRsZUV2ZW50KGNvbnRleHQsICpldmVudCk7CisgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5k
bGVFdmVudChjb250ZXh0LCBldmVudCk7CiAgICAgICAgIC8vIFRvIG1hdGNoIE1vemlsbGEsIHRo
ZSBBVF9UQVJHRVQgcGhhc2UgZmlyZXMgYm90aCBjYXB0dXJpbmcgYW5kIGJ1YmJsaW5nCiAgICAg
ICAgIC8vIGV2ZW50IGxpc3RlbmVycywgZXZlbiB0aG91Z2ggdGhhdCB2aW9sYXRlcyBzb21lIHZl
cnNpb25zIG9mIHRoZSBET00gc3BlYy4KLSAgICAgICAgcmVnaXN0ZXJlZExpc3RlbmVyLmxpc3Rl
bmVyLT5oYW5kbGVFdmVudChjb250ZXh0LCBldmVudCk7CisgICAgICAgIHJlZ2lzdGVyZWRMaXN0
ZW5lci5saXN0ZW5lci0+aGFuZGxlRXZlbnQoY29udGV4dCwgJmV2ZW50KTsKICAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRIYW5kbGVFdmVudChjb29raWUpOwogICAgIH0KICAg
ICBkLT5maXJpbmdFdmVudEl0ZXJhdG9ycy0+cmVtb3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuaAppbmRleCA2ODhlNmZmNzBiOTJjYjY4OTNiYzk5ZGU3OTBmMDY4OWQ3YTc5MmVmLi43
MDc3Nzc0MWE3YzRmYTI3MWYwM2VhYzIzZWM3NDZmYjljNTZhM2NlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRUYXJnZXQuaApAQCAtMTIzLDggKzEyMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+JiYsIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCBib29sIHJlbW92
ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVu
ZXIqLCBib29sIHVzZUNhcHR1cmUpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxFdmVudExp
c3RlbmVycygpOwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KTsKLSAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlv
bkNvZGUmKTsgLy8gRE9NIEFQSQorICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50
Jik7CisgICAgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50KiwgRXhjZXB0aW9uQ29kZSYpOyAvLyBE
T00gQVBJCiAgICAgdmlydHVhbCB2b2lkIHVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIo
KTsKIAogICAgIC8vIFVzZWQgZm9yIGxlZ2FjeSAib25FdmVudCIgYXR0cmlidXRlIEFQSXMuCkBA
IC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQ2FwdHVyaW5nRXZlbnRMaXN0
ZW5lcnMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwogICAgIGNvbnN0IEV2ZW50TGlz
dGVuZXJWZWN0b3ImIGdldEV2ZW50TGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlKTsKIAotICAgIGJvb2wgZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50Kik7CisgICAgYm9vbCBm
aXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQmKTsKICAgICBib29sIGlzRmlyaW5nRXZlbnRMaXN0ZW5l
cnMoKTsKIAogICAgIHZvaWQgdmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3Im
KTsKQEAgLTE1Myw3ICsxNTMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpID0gMDsK
ICAgICAKLSAgICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCosIEV2ZW50VGFyZ2V0RGF0
YSosIEV2ZW50TGlzdGVuZXJWZWN0b3ImKTsKKyAgICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhF
dmVudCYsIEV2ZW50VGFyZ2V0RGF0YSosIEV2ZW50TGlzdGVuZXJWZWN0b3ImKTsKIAogICAgIGZy
aWVuZCBjbGFzcyBFdmVudExpc3RlbmVySXRlcmF0b3I7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0dlbmVyaWNFdmVudFF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9H
ZW5lcmljRXZlbnRRdWV1ZS5jcHAKaW5kZXggNzJkZDBmZWVkMDJhZTJkYzdjOWYzZmQ2Y2Q3Y2Rh
OTkzMTZjMzkyYS4uZGJhODUyNzBkYjQ3OTRmNmZhYjIzYTI2YjM5ZjFjYjU5NGIxZGQyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0dlbmVyaWNFdmVudFF1ZXVlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vR2VuZXJpY0V2ZW50UXVldWUuY3BwCkBAIC0xMDAsNyArMTAwLDcg
QEAgdm9pZCBHZW5lcmljRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hPbmVFdmVudCgpCiAgICAgUmVmPEV2
ZW50VGFyZ2V0PiBwcm90ZWN0KG1fb3duZXIpOwogICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBt
X3BlbmRpbmdFdmVudHMudGFrZUZpcnN0KCk7CiAgICAgRXZlbnRUYXJnZXQmIHRhcmdldCA9IGV2
ZW50LT50YXJnZXQoKSA/ICpldmVudC0+dGFyZ2V0KCkgOiBtX293bmVyOwotICAgIHRhcmdldC5k
aXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQo
KmV2ZW50KTsKIH0KIAogdm9pZCBHZW5lcmljRXZlbnRRdWV1ZTo6Y2xvc2UoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5jcHAKaW5kZXggYzMyNTY4NDRmNDg0NThlOWJjNzQ3Y2MwZTlkOWQzNzUw
NzhkOGViMC4uYTNhYjg5NmJmNTNjZjhhMDdkZTVlOTJmZTk2Nzc0OTNhNmY5NDNmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCkBAIC0xNjAsOSArMTYwLDggQEAgdm9pZCBNZXNzYWdl
UG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcygpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0gTWVzc2FnZVBvcnQ6OmVu
dGFuZ2xlUG9ydHMoKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgV1RGOjptb3ZlKGNoYW5uZWxz
KSk7Ci0gICAgICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoV1RG
Ojptb3ZlKHBvcnRzKSwgbWVzc2FnZS5yZWxlYXNlKCkpOwotCi0gICAgICAgIGRpc3BhdGNoRXZl
bnQoZXZ0LnJlbGVhc2UoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIFJlZjxFdmVu
dD4gZXZlbnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShXVEY6Om1vdmUocG9ydHMpLCBtZXNzYWdl
LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCmluZGV4IDM4N2NhZWIwZjUzYmMxMmI4NDk2MzAwZjliODM4ZTdiYTliYjI5
NzQuLjA4ZmEwMjQ2YTUzM2E1MjgyZTM0NmNhZTE2NGFiMmViNGE1MGE1OGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKQEAgLTIwOTAsMTkgKzIwOTAsMTkgQEAgdm9pZCBOb2RlOjpoYW5kbGVMb2NhbEV2ZW50
cyhFdmVudCYgZXZlbnQpCiAgICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSAmJiBkb3duY2FzdDxF
bGVtZW50PigqdGhpcykuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgJiYgZXZlbnQuaXNNb3VzZUV2
ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZpcmVFdmVudExpc3RlbmVycygmZXZlbnQp
OworICAgIGZpcmVFdmVudExpc3RlbmVycyhldmVudCk7CiB9CiAKLXZvaWQgTm9kZTo6ZGlzcGF0
Y2hTY29wZWRFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgTm9kZTo6ZGlzcGF0
Y2hTY29wZWRFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgRXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaFNjb3BlZEV2ZW50KCp0aGlzLCBldmVudCk7CiB9CiAKLWJvb2wgTm9kZTo6ZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hFdmVudChF
dmVudCYgZXZlbnQpCiB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIVBMQVRGT1JNKElP
UykKLSAgICBpZiAoaXM8VG91Y2hFdmVudD4oKmV2ZW50KSkKLSAgICAgICAgcmV0dXJuIGRpc3Bh
dGNoVG91Y2hFdmVudChhZG9wdFJlZihkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudC5sZWFrUmVm
KCkpKSk7CisgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIGRp
c3BhdGNoVG91Y2hFdmVudChkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudCkpOwogI2VuZGlmCiAg
ICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVudCk7CiB9
CkBAIC0yMTI2LDI0ICsyMTI2LDI0IEBAIHZvaWQgTm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZp
ZWRFdmVudCgpCiBib29sIE5vZGU6OmRpc3BhdGNoRE9NQWN0aXZhdGVFdmVudChpbnQgZGV0YWls
LCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERp
c3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIFJlZlB0cjxVSUV2ZW50PiBldmVudCA9IFVJRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCwgdHJ1ZSwgdHJ1ZSwgZG9jdW1l
bnQoKS5kZWZhdWx0VmlldygpLCBkZXRhaWwpOworICAgIFJlZjxVSUV2ZW50PiBldmVudCA9IFVJ
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCwgdHJ1ZSwgdHJ1ZSwg
ZG9jdW1lbnQoKS5kZWZhdWx0VmlldygpLCBkZXRhaWwpOwogICAgIGV2ZW50LT5zZXRVbmRlcmx5
aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50KTsKICAgICBkaXNwYXRjaFNjb3BlZEV2ZW50KGV2ZW50
KTsKICAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CiAKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKSAmJiAhUExBVEZPUk0oSU9TKQotYm9vbCBOb2RlOjpkaXNwYXRjaFRvdWNo
RXZlbnQoUGFzc1JlZlB0cjxUb3VjaEV2ZW50PiBldmVudCkKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hU
b3VjaEV2ZW50KFRvdWNoRXZlbnQmIGV2ZW50KQogewogICAgIHJldHVybiBFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoRXZlbnQodGhpcywgZXZlbnQpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
SU5ESUVfVUkpCi1ib29sIE5vZGU6OmRpc3BhdGNoVUlSZXF1ZXN0RXZlbnQoUGFzc1JlZlB0cjxV
SVJlcXVlc3RFdmVudD4gZXZlbnQpCitib29sIE5vZGU6OmRpc3BhdGNoVUlSZXF1ZXN0RXZlbnQo
VUlSZXF1ZXN0RXZlbnQmIGV2ZW50KQogewogICAgIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hF
dmVudCh0aGlzLCBldmVudCk7Ci0gICAgcmV0dXJuIGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpIHx8
IGV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7CisgICAgcmV0dXJuIGV2ZW50LmRlZmF1bHRIYW5k
bGVkKCkgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCgpOwogfQogI2VuZGlmCiAgICAgCkBAIC0y
MTUzLDggKzIxNTMsOCBAQCBib29sIE5vZGU6OmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0
IFN0cmluZyYgc291cmNlVVJMKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFJlZjxOb2Rl
PiBwcm90ZWN0KCp0aGlzKTsKLSAgICBSZWZQdHI8QmVmb3JlTG9hZEV2ZW50PiBiZWZvcmVMb2Fk
RXZlbnQgPSBCZWZvcmVMb2FkRXZlbnQ6OmNyZWF0ZShzb3VyY2VVUkwpOwotICAgIGRpc3BhdGNo
RXZlbnQoYmVmb3JlTG9hZEV2ZW50LmdldCgpKTsKKyAgICBSZWY8QmVmb3JlTG9hZEV2ZW50PiBi
ZWZvcmVMb2FkRXZlbnQgPSBCZWZvcmVMb2FkRXZlbnQ6OmNyZWF0ZShzb3VyY2VVUkwpOworICAg
IGRpc3BhdGNoRXZlbnQoYmVmb3JlTG9hZEV2ZW50KTsKICAgICByZXR1cm4gIWJlZm9yZUxvYWRF
dmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBlZmYwODZhNWJl
ZTJlMGJmODViNzdhYzg3ZWJjMjFhNTA3NTNhYmQ3Li43YjU4ZjRmOGQyM2E4ZGEyMTlmOGM5NGY4
M2ZiNzlhYzVhNDkyMjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTUxOSw5ICs1MTksOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpIG92ZXJyaWRlOwog
CiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29s
IGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRpc3BhdGNo
U2NvcGVkRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQgZGlzcGF0Y2hTY29wZWRF
dmVudChFdmVudCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50
Jik7CiAKQEAgLTUzMywxMCArNTMzLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykgJiYgIVBMQVRGT1JNKElPUykKLSAgICBib29sIGRpc3BhdGNoVG91Y2hF
dmVudChQYXNzUmVmUHRyPFRvdWNoRXZlbnQ+KTsKKyAgICBib29sIGRpc3BhdGNoVG91Y2hFdmVu
dChUb3VjaEV2ZW50Jik7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5ESUVfVUkpCi0gICAgYm9vbCBk
aXNwYXRjaFVJUmVxdWVzdEV2ZW50KFBhc3NSZWZQdHI8VUlSZXF1ZXN0RXZlbnQ+KTsKKyAgICBi
b29sIGRpc3BhdGNoVUlSZXF1ZXN0RXZlbnQoVUlSZXF1ZXN0RXZlbnQmKTsKICNlbmRpZgogCiAg
ICAgYm9vbCBkaXNwYXRjaEJlZm9yZUxvYWRFdmVudChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5jcHAKaW5kZXggMjBmMThjZDRjMmNi
ODcyZTY3NmRjNzE1MzY3NWY1ZTllYjg0NmYzOS4uOTM1MDEzMjM0ODRhMzU0NDM4ZjQxZGExYjM5
NzAwM2FhOWQ5N2EyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50
UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcApA
QCAtNDMsMjcgKzQzLDI3IEBAIFNjb3BlZEV2ZW50UXVldWUmIFNjb3BlZEV2ZW50UXVldWU6OnNp
bmdsZXRvbigpCiAgICAgcmV0dXJuIHNjb3BlZEV2ZW50UXVldWU7CiB9CiAKLXZvaWQgU2NvcGVk
RXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBT
Y29wZWRFdmVudFF1ZXVlOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAg
IGlmIChtX3Njb3BpbmdMZXZlbCkKLSAgICAgICAgbV9xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50
KTsKKyAgICAgICAgbV9xdWV1ZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkpOwogICAg
IGVsc2UKICAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKLXZvaWQgU2NvcGVkRXZl
bnRRdWV1ZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkgY29uc3QKK3Zv
aWQgU2NvcGVkRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgp
KTsKICAgICAvLyBTdG9yZSB0aGUgdGFyZ2V0IGluIGEgbG9jYWwgdmFyaWFibGUgdG8gYXZvaWQg
cG9zc2libHkgZGVyZWZlcmVuY2luZyBhIG51bGxpZmllZCBQYXNzUmVmUHRyIGFmdGVyIGl0J3Mg
cGFzc2VkIG9uLgotICAgIE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwor
ICAgIE5vZGUqIG5vZGUgPSBldmVudC50YXJnZXQoKS0+dG9Ob2RlKCk7CiAgICAgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KG5vZGUsIGV2ZW50KTsKIH0KIAogdm9pZCBTY29wZWRFdmVu
dFF1ZXVlOjpkaXNwYXRjaEFsbEV2ZW50cygpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+
IHF1ZXVlZEV2ZW50cyA9IFdURjo6bW92ZShtX3F1ZXVlZEV2ZW50cyk7CisgICAgVmVjdG9yPFJl
ZjxFdmVudD4+IHF1ZXVlZEV2ZW50cyA9IFdURjo6bW92ZShtX3F1ZXVlZEV2ZW50cyk7CiAgICAg
Zm9yIChhdXRvJiBxdWV1ZWRFdmVudCA6IHF1ZXVlZEV2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hF
dmVudChxdWV1ZWRFdmVudC5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRjaEV2ZW50KHF1ZXVl
ZEV2ZW50KTsKIH0KIAogdm9pZCBTY29wZWRFdmVudFF1ZXVlOjppbmNyZW1lbnRTY29waW5nTGV2
ZWwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmgKaW5kZXggY2Y2YjI5YzhkOTkx
MzdiMDVlYzY0ZTYwNDdmMzQyZTVhMjdkZmNiMC4uNzhiYmM2NWYzOWFkZDM3ZDQyMWJlMDQyZTMw
OWY5YmZhYjA1MTcyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50
UXVldWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5oCkBAIC00
NiwxOCArNDYsMTggQEAgY2xhc3MgU2NvcGVkRXZlbnRRdWV1ZSB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU2NvcGVkRXZlbnRRdWV1ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIHN0YXRpYyBTY29wZWRFdmVudFF1ZXVlJiBzaW5nbGV0b24oKTsKLSAgICB2b2lk
IGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQo
UmVmPEV2ZW50PiYmKTsKIAogcHJpdmF0ZToKICAgICBTY29wZWRFdmVudFF1ZXVlKCkgPSBkZWZh
dWx0OwogICAgIH5TY29wZWRFdmVudFF1ZXVlKCkgPSBkZWxldGU7CiAKLSAgICB2b2lkIGRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIGNvbnN0OworICAgIHZvaWQgZGlzcGF0Y2hFdmVu
dChFdmVudCYpIGNvbnN0OwogICAgIHZvaWQgZGlzcGF0Y2hBbGxFdmVudHMoKTsKICAgICB2b2lk
IGluY3JlbWVudFNjb3BpbmdMZXZlbCgpOwogICAgIHZvaWQgZGVjcmVtZW50U2NvcGluZ0xldmVs
KCk7CiAKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gbV9xdWV1ZWRFdmVudHM7CisgICAgVmVj
dG9yPFJlZjxFdmVudD4+IG1fcXVldWVkRXZlbnRzOwogICAgIHVuc2lnbmVkIG1fc2NvcGluZ0xl
dmVsIHsgMCB9OwogCiAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8V2ViQ29y
ZTo6U2NvcGVkRXZlbnRRdWV1ZT47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHAKaW5kZXggNDJmNWU3OTkzOTJmNTFmYzc5ZGRkMTEzNTMzOTJhZTQ3NmJj
MmVmYi4uZjA1MmQ4NmViNTQ1MGMyNzAzOGJkNTRjZGRkNTZjOGM4NWQwOTlmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtNDA0LDcgKzQw
NCw3IEBAIGJvb2wgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGlzcGF0Y2hFcnJvckV2ZW50KGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQKIAogICAgIEFTU0VSVCghbV9pbkRpc3BhdGNo
RXJyb3JFdmVudCk7CiAgICAgbV9pbkRpc3BhdGNoRXJyb3JFdmVudCA9IHRydWU7Ci0gICAgUmVm
UHRyPEVycm9yRXZlbnQ+IGVycm9yRXZlbnQgPSBFcnJvckV2ZW50OjpjcmVhdGUobWVzc2FnZSwg
c291cmNlTmFtZSwgbGluZSwgY29sdW1uKTsKKyAgICBSZWY8RXJyb3JFdmVudD4gZXJyb3JFdmVu
dCA9IEVycm9yRXZlbnQ6OmNyZWF0ZShtZXNzYWdlLCBzb3VyY2VOYW1lLCBsaW5lLCBjb2x1bW4p
OwogICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChlcnJvckV2ZW50KTsKICAgICBtX2luRGlzcGF0
Y2hFcnJvckV2ZW50ID0gZmFsc2U7CiAgICAgcmV0dXJuIGVycm9yRXZlbnQtPmRlZmF1bHRQcmV2
ZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCmluZGV4IDY4OTM3NzBlZTAxZDZkYjVmYTk2ZTEyYTQ3MDMxMTE2ZGMz
YjM5N2UuLmI3MWY5NzNlN2UzMDFiZWQwNDE3N2FiNzZhYWFiMGEzMWU2YzU3ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cApAQCAtNjgyLDEwICs2ODIsMTAgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpp
bnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKICAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCkpCiAgICAgICAgIHZpZXctPmRpc2FibGVM
YXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24oKTsKIAotICAgIFJl
ZlB0cjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24obV9m
cmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVz
KTsKKyAgICBSZWY8VGV4dEV2ZW50PiBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0
aW9uKG1fZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHRleHQsIGRpY3RhdGlvbkFsdGVy
bmF0aXZlcyk7CiAgICAgZXZlbnQtPnNldFVuZGVybHlpbmdFdmVudCh0cmlnZ2VyaW5nRXZlbnQp
OwogCi0gICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsK
KyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgIHJldHVybiBldmVudC0+ZGVm
YXVsdEhhbmRsZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGFmNTI4
NmRjOTFlYWZlZWFhMGFhYjZhOTY1ZjQ2ZjdjOTgyNTBkZWMuLmNmMWJlMmFiZTY0ZmE3NDZhZTZi
MTA1YjQ2NDE3ODBiNzQ1MGU1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTQ2
MSw3ICs0NjEsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dChjb25zdCBTdHJpbmcm
IHBhc3RpbmdUZXh0LCBib29sIHNtYXJ0UmVwbGFjZSkKICAgICBOb2RlKiB0YXJnZXQgPSBmaW5k
RXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJl
dHVybjsKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JQbGFp
blRleHRQYXN0ZShkb2N1bWVudCgpLmRvbVdpbmRvdygpLCBwYXN0aW5nVGV4dCwgc21hcnRSZXBs
YWNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRF
dmVudDo6Y3JlYXRlRm9yUGxhaW5UZXh0UGFzdGUoZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgcGFz
dGluZ1RleHQsIHNtYXJ0UmVwbGFjZSkpOwogfQogCiB2b2lkIEVkaXRvcjo6cGFzdGVBc0ZyYWdt
ZW50KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gcGFzdGluZ0ZyYWdtZW50LCBib29sIHNt
YXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIHJlc3Bl
Y3RzTWFpbEJsb2NrcXVvdGUpCkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3Rl
QXNGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHBhc3RpbmdGcmFnbWVudCwg
Ym9vbAogICAgIE5vZGUqIHRhcmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsK
ICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuOwotICAgIHRhcmdldC0+ZGlzcGF0Y2hF
dmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckZyYWdtZW50UGFzdGUoZG9jdW1lbnQoKS5kb21XaW5k
b3coKSwgcGFzdGluZ0ZyYWdtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUsIHJlc3BlY3Rz
TWFpbEJsb2NrcXVvdGUpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICB0YXJnZXQtPmRpc3BhdGNo
RXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JGcmFnbWVudFBhc3RlKGRvY3VtZW50KCkuZG9tV2lu
ZG93KCksIHBhc3RpbmdGcmFnbWVudCwgc21hcnRSZXBsYWNlLCBtYXRjaFN0eWxlLCByZXNwZWN0
c01haWxCbG9ja3F1b3RlKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0Qnlw
YXNzaW5nREhUTUwoKQpAQCAtODUxLDggKzg1MSw4IEBAIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQ
UEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBEYXRhVHJhbnNmZXJBY2Nlc3NQ
CiAKICAgICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBkYXRhVHJhbnNmZXIgPSBEYXRhVHJhbnNmZXI6
OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZShwb2xpY3kpOwogCi0gICAgUmVmUHRyPEV2ZW50PiBldmVu
dCA9IENsaXBib2FyZEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVlLCB0cnVlLCBkYXRhVHJh
bnNmZXIpOwotICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCwgSUdOT1JFX0VYQ0VQVElP
Tik7CisgICAgUmVmPEV2ZW50PiBldmVudCA9IENsaXBib2FyZEV2ZW50OjpjcmVhdGUoZXZlbnRU
eXBlLCB0cnVlLCB0cnVlLCBkYXRhVHJhbnNmZXIpOworICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVu
dChldmVudCk7CiAgICAgYm9vbCBub0RlZmF1bHRQcm9jZXNzaW5nID0gZXZlbnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKTsKICAgICBpZiAobm9EZWZhdWx0UHJvY2Vzc2luZyAmJiBwb2xpY3kgPT0gRGF0
YVRyYW5zZmVyQWNjZXNzUG9saWN5OjpXcml0YWJsZSkgewogICAgICAgICBhdXRvIHBhc3RlYm9h
cmQgPSBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKTsKQEAgLTEwMTIsOSArMTAx
Miw5IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cyhQ
YXNzUmVmUHRyPEVsZW1lbnQ+IHBycFN0YXJ0Um9vCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHN0YXJ0
Um9vdCA9IHBycFN0YXJ0Um9vdDsKICAgICBSZWZQdHI8RWxlbWVudD4gZW5kUm9vdCA9IHBycEVu
ZFJvb3Q7CiAgICAgaWYgKHN0YXJ0Um9vdCkKLSAgICAgICAgc3RhcnRSb290LT5kaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5n
ZWRFdmVudCwgZmFsc2UsIGZhbHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIHN0YXJ0
Um9vdC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0
YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogICAgIGlmIChlbmRSb290
ICYmIGVuZFJvb3QgIT0gc3RhcnRSb290KQotICAgICAgICBlbmRSb290LT5kaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRF
dmVudCwgZmFsc2UsIGZhbHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGVuZFJvb3Qt
PmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVD
b250ZW50Q2hhbmdlZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmFw
cGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IGNtZCkKQEAgLTE3
MjAsOCArMTcyMCw4IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIFNldENvbXBvc2l0aW9uTW9kZSBtb2RlKQogICAgIC8vIFdlIHNob3VsZCBzZW5kIHRo
aXMgZXZlbnQgYmVmb3JlIHNlbmRpbmcgYSBUZXh0RXZlbnQgYXMgd3JpdHRlbiBpbiBTZWN0aW9u
IDYuMi4yIGFuZCA2LjIuMyBvZgogICAgIC8vIHRoZSBET00gRXZlbnQgc3BlY2lmaWNhdGlvbi4K
ICAgICBpZiAoRWxlbWVudCogdGFyZ2V0ID0gZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxDb21wb3NpdGlvbkV2ZW50PiBldmVudCA9IENvbXBvc2l0aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY29tcG9zaXRpb25lbmRFdmVudCwgZG9jdW1lbnQoKS5k
b21XaW5kb3coKSwgdGV4dCk7Ci0gICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudC5y
ZWxlYXNlKCksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBSZWY8Q29tcG9zaXRpb25FdmVu
dD4gZXZlbnQgPSBDb21wb3NpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0
aW9uZW5kRXZlbnQsIGRvY3VtZW50KCkuZG9tV2luZG93KCksIHRleHQpOworICAgICAgICB0YXJn
ZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgIH0KIAogICAgIC8vIElmIHRleHQgaXMgZW1w
dHksIHRoZW4gZGVsZXRlIHRoZSBvbGQgY29tcG9zaXRpb24gaGVyZS4gIElmIHRleHQgaXMgbm9u
LWVtcHR5LCBJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQKQEAgLTE3OTUsOCArMTc5NSw4IEBAIHZv
aWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3Rv
cjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ZXZlbnQgPSBDb21wb3NpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0aW9u
ZW5kRXZlbnQsIGRvY3VtZW50KCkuZG9tV2luZG93KCksIHRleHQpOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChldmVudC5nZXQoKSkKLSAgICAgICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChl
dmVudCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGlmIChldmVudCkKKyAgICAgICAgICAg
IHRhcmdldC0+ZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogICAgIH0KIAogICAgIC8vIElmIHRleHQg
aXMgZW1wdHksIHRoZW4gZGVsZXRlIHRoZSBvbGQgY29tcG9zaXRpb24gaGVyZS4gIElmIHRleHQg
aXMgbm9uLWVtcHR5LCBJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNWI2OGY1N2Nm
YWMwYmJjYTlmMThiNDJiMWE1YWIwYjE1ZmJjODU4Yi4uNzg5NzJjNzUyMjZiZGY1NGNiNzQ1NDk3
Mjc4NzYzZGM0NzJhMDNiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTE4MiwxNiArMTgyLDE2IEBAIFJlcGxhY2VtZW50
RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBEb2N1bWVu
dEZyYWdtZW50KiBmCiAgICAgcmVzdG9yZUFuZFJlbW92ZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJh
Z21lbnQoaG9sZGVyLmdldCgpKTsKIAogICAgIC8vIEdpdmUgdGhlIHJvb3QgYSBjaGFuY2UgdG8g
Y2hhbmdlIHRoZSB0ZXh0LgotICAgIFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZ0
ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZSh0ZXh0KTsKLSAgICBlZGl0YWJsZVJv
b3QtPmRpc3BhdGNoRXZlbnQoZXZ0LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBpZiAodGV4
dCAhPSBldnQtPnRleHQoKSB8fCAhZWRpdGFibGVSb290LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxl
KCkpIHsKKyAgICBSZWY8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+IGV2ZW50ID0gQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQ6OmNyZWF0ZSh0ZXh0KTsKKyAgICBlZGl0YWJsZVJvb3QtPmRpc3BhdGNo
RXZlbnQoZXZlbnQpOworICAgIGlmICh0ZXh0ICE9IGV2ZW50LT50ZXh0KCkgfHwgIWVkaXRhYmxl
Um9vdC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIHJlc3RvcmVBbmRSZW1v
dmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7CiAKICAgICAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAg
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgZXZ0LT50ZXh0KCkpOworICAgICAg
ICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIGV2ZW50LT50ZXh0
KCkpOwogICAgICAgICBpZiAoIW1fZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0
aW9uQmFzZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0aW9u
QmFzZUNvbW1hbmQuY3BwCmluZGV4IGZkNzIxOWQ2MGEzYThmZmE2NjZlMDE1ZTVkYTEwNTJiMjZj
YzFjNWMuLmNjYzNkZGVhZTJlN2U4NTZiZmQyMzgzZmZlZWQ1MTBjMTU0NzhiN2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAK
QEAgLTYzLDkgKzYzLDkgQEAgU3RyaW5nIGRpc3BhdGNoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBpZiAoTm9kZSog
c3RhcnROb2RlID0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgp
KSB7CiAgICAgICAgIGlmIChzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkgewogICAg
ICAgICAgICAgLy8gU2VuZCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4gVGhlIGV2ZW50IGhhbmRs
ZXIgd2lsbCB1cGRhdGUgdGV4dCBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBSZWZQdHI8QmVm
b3JlVGV4dEluc2VydGVkRXZlbnQ+IGV2dCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVh
dGUodGV4dCk7Ci0gICAgICAgICAgICBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+
ZGlzcGF0Y2hFdmVudChldnQsIElHTk9SRV9FWENFUFRJT04pOwotICAgICAgICAgICAgbmV3VGV4
dCA9IGV2dC0+dGV4dCgpOworICAgICAgICAgICAgUmVmPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
PiBldmVudCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUodGV4dCk7CisgICAgICAg
ICAgICBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+ZGlzcGF0Y2hFdmVudChldmVu
dCk7CisgICAgICAgICAgICBuZXdUZXh0ID0gZXZlbnQtPnRleHQoKTsKICAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gbmV3VGV4dDsKQEAgLTc3LDggKzc3LDggQEAgYm9vbCBjYW5BcHBlbmRO
ZXdMaW5lRmVlZFRvU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBSZWZQdHI8
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6
OmNyZWF0ZShTdHJpbmcoIlxuIikpOwotICAgIG5vZGUtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElH
Tk9SRV9FWENFUFRJT04pOworICAgIFJlZjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQg
PSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKFN0cmluZygiXG4iKSk7CisgICAgbm9k
ZS0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT50ZXh0KCkubGVuZ3Ro
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDk1
N2E5N2VhYTI0Mzc4NGNiZjUzMjhjZGVlNzEzMGY4NDY2ZTJkOGEuLjBhZDYxZjM3ZWMyMWNiNDFh
ODEyNmVlMzQ2MzQyNjUwNjZhZDJkOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcApAQCAtNTEyMCwxMCArNTEyMCw5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
bWVkaWFQbGF5ZXJDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZChNZWRpYVBs
CiAgICAgdXBkYXRlTWVkaWFTdGF0ZShVcGRhdGVNZWRpYVN0YXRlOjpBc3luY2hyb25vdXNseSk7
CiB9CiAKLWJvb2wgSFRNTE1lZGlhRWxlbWVudDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBwcnBFdmVudCkKK2Jvb2wgSFRNTE1lZGlhRWxlbWVudDo6ZGlzcGF0Y2hFdmVudChFdmVu
dCYgZXZlbnQpCiB7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwotICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJn
ZXRpc3dpcmVsZXNzY2hhbmdlZEV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLndlYmtpdGN1cnJlbnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQp
CiAgICAgICAgIHNjaGVkdWxlRGVsYXllZEFjdGlvbihDaGVja1BsYXliYWNrVGFyZ2V0Q29tcGF0
YWJsaXR5KTsKICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCAwNTBhY2I0NjA3MWE0
ZmVjNTRhZjFjNmZlN2YzMWYwYWUxOTgwNTkzLi5hMDNmMmM0ZmM2ZmRlZjZmMmVhN2YyZjRlM2Uw
ODU2NWFlZWZmYjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAt
NTY0LDcgKzU2NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbnF1ZXVlUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlDaGFuZ2VkRXZlbnQoKTsKIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNw
YXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92
ZXJyaWRlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCmluZGV4IGQ2YjFmOWE2ZWI0ZDcyZDk5ZTBhZDkx
Yjg1MjRiOWQ0ZjhjNDUxNDUuLmIzZWIzYjgwNGVkYjQzYzVlNzhiOGU0Y2RlNzE5Y2UwY2JkZTJj
NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcApAQCAtMjYwLDcg
KzI2MCw3IEBAIHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6ZGlkQ29tcGxldGVMb2FkKExvYWRTdGF0
dXMgc3RhdHVzKQogCiAgICAgaWYgKHN0YXR1cyA9PSBGYWlsdXJlKSB7CiAgICAgICAgIHNldFJl
YWR5U3RhdGUoSFRNTFRyYWNrRWxlbWVudDo6VFJBQ0tfRVJST1IpOwotICAgICAgICBkaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCBmYWxz
ZSksIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50Ojpk
aWRDb21wbGV0ZUxvYWQoTG9hZFN0YXR1cyBzdGF0dXMpCiAKICAgICAvLyAgICAgMi4gSWYgdGhl
IGZpbGUgd2FzIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQsIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFt
ZWQgbG9hZCBhdCB0aGUgCiAgICAgLy8gICAgICAgIHRyYWNrIGVsZW1lbnQuCi0gICAgZGlzcGF0
Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxz
ZSksIElHTk9SRV9FWENFUFRJT04pOworICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogLy8gTk9URTogVGhl
IHZhbHVlcyBpbiB0aGUgVGV4dFRyYWNrOjpSZWFkaW5lc3NTdGF0ZSBlbnVtIG11c3Qgc3RheSBp
biBzeW5jIHdpdGggdGhvc2UgaW4gSFRNTFRyYWNrRWxlbWVudDo6UmVhZHlTdGF0ZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcAppbmRleCA5NjM3MjQ0Njc2ODc0MDRlZDYy
ZWUzN2QwMTRlZjRkNjUzMzcwNzIxLi5kYmIwMmFiOWU5NDkxMjE5NDZhMDBlYmFkNzNhMTgyMGM3
ZjE2YjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCkBAIC01NDQs
MTEgKzU0NCwxMSBAQCB2b2lkIE1lZGlhQ29udHJvbGxlcjo6c2NoZWR1bGVFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50TmFtZSkKIAogdm9pZCBNZWRpYUNvbnRyb2xsZXI6OmFzeW5jRXZl
bnRUaW1lckZpcmVkKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gcGVuZGluZ0V2ZW50
czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gcGVuZGluZ0V2ZW50czsKIAogICAgIG1fcGVuZGlu
Z0V2ZW50cy5zd2FwKHBlbmRpbmdFdmVudHMpOwogICAgIGZvciAoYXV0byYgcGVuZGluZ0V2ZW50
IDogcGVuZGluZ0V2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hFdmVudChwZW5kaW5nRXZlbnQucmVs
ZWFzZSgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChwZW5kaW5n
RXZlbnQpOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbGxlcjo6Y2xlYXJQb3NpdGlvblRpbWVyRmly
ZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmgKaW5kZXggNzUzM2I0OGMyNzhm
NWQ2MWM1ZjZlMDIyY2U3NGMzNjE4NTY4NDJiYy4uMzE1ZWVjZDE5MWEzYzY3OWExMjIwY2MwZjZk
OWI4M2NkMGYyNTJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRy
b2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5oCkBAIC0x
NDUsNyArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbXV0ZWQ7CiAgICAgUmVhZHlTdGF0
ZSBtX3JlYWR5U3RhdGU7CiAgICAgUGxheWJhY2tTdGF0ZSBtX3BsYXliYWNrU3RhdGU7Ci0gICAg
VmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fcGVuZGluZ0V2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2
ZW50Pj4gbV9wZW5kaW5nRXZlbnRzOwogICAgIFRpbWVyIG1fYXN5bmNFdmVudFRpbWVyOwogICAg
IG11dGFibGUgVGltZXIgbV9jbGVhclBvc2l0aW9uVGltZXI7CiAgICAgU3RyaW5nIG1fbWVkaWFH
cm91cDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggMzMwYzk1MDRiMDc2OWQ5NDA3MjMxN2RkZDI5OTNk
Mjk4YjlmOWFkYy4uZWQzMDQ5ZDM4NjY2NDk0NWUwOTlkNjYzZGE4MjlkYjY1OTIzOGQwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAKQEAgLTQ3NjYsNyArNDc2Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQog
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVu
dCgpCiB7Ci0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEV2ZW50PiBldmVudCA9IFdlYkdMQ29udGV4
dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGxvc3RFdmVudCwgZmFsc2Us
IHRydWUsICIiKTsKKyAgICBSZWY8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250
ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIiIpOwogICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICBt
X3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKICAgICBpZiAobV9j
b250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RDb250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4
IGVlYTBlYzc1NzVkNzczYzhiNDk1NTViODZkNjRiOTgwM2ZlZmFjYjguLmVkYjA2MjcyY2M4MDE5
NDc5OGJmYTJmZWYwYjRiMDQxYmFkMWFmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBVUkwg
ZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24oRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJl
dHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCk7CiB9CiAKLWlubGluZSBQ
YXNzUmVmUHRyPEV2ZW50PiBjcmVhdGVTY3JpcHRMb2FkRXZlbnQoKQoraW5saW5lIFJlZjxFdmVu
dD4gY3JlYXRlU2NyaXB0TG9hZEV2ZW50KCkKIHsKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCmluZGV4IGMyNDU4ZDI1ZWE5NDgzZjRkODZhNjNj
NTA4Njc2NWQ1ZjU2MzhlMTQuLmE2YjFkYmI4ODQ0ZTczMTFjNTZhODRiODViMzhkMzc3MWIxMzYx
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKQEAgLTE5
MCw3ICsxOTAsNyBAQCB2b2lkIFRleHRUcmFja0N1ZTo6aW52YWxpZGF0ZUN1ZUluZGV4KCkKICAg
ICBtX2N1ZUluZGV4ID0gaW52YWxpZEN1ZUluZGV4OwogfQogCi1ib29sIFRleHRUcmFja0N1ZTo6
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgVGV4dFRyYWNrQ3Vl
OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICAvLyBXaGVuIGEgVGV4dFRyYWNr
J3MgbW9kZSBpcyBkaXNhYmxlZDogbm8gY3VlcyBhcmUgYWN0aXZlLCBubyBldmVudHMgZmlyZWQu
CiAgICAgaWYgKCF0cmFjaygpIHx8IHRyYWNrKCktPm1vZGUoKSA9PSBUZXh0VHJhY2s6OmRpc2Fi
bGVkS2V5d29yZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tDdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgKaW5k
ZXggZWMyYWIyMmUyZjc2M2U4NDA3ZmEzZDE4OWQ5NmRiYzBlOGQ2Y2I4Mi4uNjRlNmZkMjUwYmNm
MWIzOTlkYzIzM2UzZjQxMjFlZGE4OGNhNWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFja0N1ZS5oCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGludmFs
aWRhdGVDdWVJbmRleCgpOwogCiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7
Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7CiAK
ICAgICBib29sIGlzQWN0aXZlKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldElzQWN0aXZlKGJvb2wp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNzg0YjNhM2U0MGJkZjJh
YTAyYTI1NWViOGVjZDI5OGNjNTA0YTBlNC4uMWJhZTRhMjQwNTkxMjUxMGU4YzI3Mzk3MzI5M2Ew
OTQ0Y2EwMTI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0yODU5
LDcgKzI4NTksNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRjaFVubG9hZEV2ZW50cyhVbmxv
YWRFdmVudFBvbGljeSB1bmxvYWRFdmVudFBvbGljeSkKICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY3NzAKIAogICAgICAgICAgICAgaWYg
KCFtX2ZyYW1lLmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8RXZlbnQ+IHVubG9hZEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9h
ZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBSZWY8RXZlbnQ+IHVubG9h
ZEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFs
c2UpKTsKICAgICAgICAgICAgICAgICAvLyBUaGUgRG9jdW1lbnRMb2FkZXIgKGFuZCB0aHVzIGl0
cyBEb2N1bWVudExvYWRUaW1pbmcpIG1pZ2h0IGdldCBkZXN0cm95ZWQKICAgICAgICAgICAgICAg
ICAvLyB3aGlsZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQsIHNvIHByb3RlY3QgaXQgdG8gcHJldmVu
dCB3cml0aW5nIHRoZSBlbmQKICAgICAgICAgICAgICAgICAvLyB0aW1lIGludG8gZnJlZWQgbWVt
b3J5LgpAQCAtMjkwNSwxOCArMjkwNSwxOCBAQCBib29sIEZyYW1lTG9hZGVyOjpkaXNwYXRjaEJl
Zm9yZVVubG9hZEV2ZW50KENocm9tZSYgY2hyb21lLCBGcmFtZUxvYWRlciogZnJhbWVMbwogICAg
IGlmICghZG9jdW1lbnQtPmJvZHlPckZyYW1lc2V0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIAotICAgIFJlZlB0cjxCZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2FkRXZlbnQgPSBC
ZWZvcmVVbmxvYWRFdmVudDo6Y3JlYXRlKCk7CisgICAgUmVmPEJlZm9yZVVubG9hZEV2ZW50PiBi
ZWZvcmVVbmxvYWRFdmVudCA9IEJlZm9yZVVubG9hZEV2ZW50OjpjcmVhdGUoKTsKICAgICBtX3Bh
Z2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IFBhZ2VEaXNtaXNzYWxUeXBlOjpCZWZv
cmVVbmxvYWQ7CiAKICAgICB7CiAgICAgICAgIEZvcmJpZFByb21wdHNTY29wZSBmb3JiaWRQcm9t
cHRzKG1fZnJhbWUucGFnZSgpKTsKLSAgICAgICAgZG9tV2luZG93LT5kaXNwYXRjaEV2ZW50KGJl
Zm9yZVVubG9hZEV2ZW50LmdldCgpLCBkb21XaW5kb3ctPmRvY3VtZW50KCkpOworICAgICAgICBk
b21XaW5kb3ctPmRpc3BhdGNoRXZlbnQoYmVmb3JlVW5sb2FkRXZlbnQsIGRvbVdpbmRvdy0+ZG9j
dW1lbnQoKSk7CiAgICAgfQogCiAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNo
ZWQgPSBQYWdlRGlzbWlzc2FsVHlwZTo6Tm9uZTsKIAogICAgIGlmICghYmVmb3JlVW5sb2FkRXZl
bnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSkKLSAgICAgICAgZG9jdW1lbnQtPmRlZmF1bHRFdmVudEhh
bmRsZXIoYmVmb3JlVW5sb2FkRXZlbnQuZ2V0KCkpOworICAgICAgICBkb2N1bWVudC0+ZGVmYXVs
dEV2ZW50SGFuZGxlcihiZWZvcmVVbmxvYWRFdmVudC5wdHIoKSk7CiAgICAgaWYgKGJlZm9yZVVu
bG9hZEV2ZW50LT5yZXR1cm5WYWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlSG9zdC5jcHAKaW5kZXggOTg5MDk5NDBlMzQ0ZjNiMjg2YjIwY2I1MWFkMTIwODA2ZjIy
M2QyMy4uODhlN2VlMmIyNTMxZGZmNzE3NjFmMmM1ZTcwY2U0ODJlODhiYTRlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhv
c3QuY3BwCkBAIC0zNTAsNyArMzUwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZGlz
cGF0Y2hET01FdmVudChFdmVudElEIGlkLCBpbnQgdG90YWwsIGludCBkb25lKQogICAgICAgICAg
ICAgZXZlbnQgPSBQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVlLCBkb25lLCB0
b3RhbCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShl
dmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIG1fZG9tQXBwbGljYXRpb25DYWNoZS0+
ZGlzcGF0Y2hFdmVudChldmVudCwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIG1fZG9t
QXBwbGljYXRpb25DYWNoZS0+ZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDFlZmFlYjQxYTc4ZjJlY2E5ODg1M2Y3NzIxZDll
OGU1Zjk0NWU4NTkuLmY4OWUxOTQ2ODg5NGYzNTMwMmRkNTVjZjA0ZTMxYzBlNmMyYTk2M2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIFJlZjxNZXNzYWdlRXZlbnQ+IGV2ZW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFu
Z2xlUG9ydHMoKmNvbnRleHQsIFdURjo6bW92ZShtX2NoYW5uZWxzKSk7CiAgICAgICAgIHJldHVy
biBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZVBvcnRzKSwgbV9tZXNzYWdl
LCBtX29yaWdpbiwgU3RyaW5nKCksIG1fc291cmNlKTsKQEAgLTkyOCw3ICs5MjgsNyBAQCB2b2lk
IERPTVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGltZXImIHRpbWVy
KQogICAgIGRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKHRpbWVyLnRhcmdldE9y
aWdpbigpLCB0aW1lci5ldmVudChkb2N1bWVudCgpKSwgdGltZXIuc3RhY2tUcmFjZSgpKTsKIH0K
IAotdm9pZCBET01XaW5kb3c6OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNl
Y3VyaXR5T3JpZ2luKiBpbnRlbmRlZFRhcmdldE9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gZXZl
bnQsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlKQordm9pZCBET01XaW5k
b3c6OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3VyaXR5T3JpZ2luKiBp
bnRlbmRlZFRhcmdldE9yaWdpbiwgRXZlbnQmIGV2ZW50LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gc3RhY2tUcmFjZSkKIHsKICAgICBpZiAoaW50ZW5kZWRUYXJnZXRPcmlnaW4pIHsKICAg
ICAgICAgLy8gQ2hlY2sgdGFyZ2V0IG9yaWdpbiBub3cgc2luY2UgdGhlIHRhcmdldCBkb2N1bWVu
dCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSB0aW1lciB3YXMgc2NoZWR1bGVkLgpAQCAtMTg3
MCw3ICsxODcwLDcgQEAgYm9vbCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIKIAogdm9pZCBET01XaW5kb3c6
OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGxvYWRFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworICAgIFJl
ZjxFdmVudD4gbG9hZEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50
LCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmxvYWRlcigpLmRv
Y3VtZW50TG9hZGVyKCkgJiYgIW1fZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnRp
bWluZygpLmxvYWRFdmVudFN0YXJ0KCkpIHsKICAgICAgICAgLy8gVGhlIERvY3VtZW50TG9hZGVy
IChhbmQgdGh1cyBpdHMgRG9jdW1lbnRMb2FkVGltaW5nKSBtaWdodCBnZXQgZGVzdHJveWVkIHdo
aWxlIGRpc3BhdGNoaW5nCiAgICAgICAgIC8vIHRoZSBldmVudCwgc28gcHJvdGVjdCBpdCB0byBw
cmV2ZW50IHdyaXRpbmcgdGhlIGVuZCB0aW1lIGludG8gZnJlZWQgbWVtb3J5LgpAQCAtMTg5Miwz
NCArMTg5MiwzMyBAQCB2b2lkIERPTVdpbmRvdzo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bG9hZEV2ZW50RmlyZWQoZnJhbWUoKSk7CiB9CiAKLWJv
b2wgRE9NV2luZG93OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50LCBQ
YXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBUYXJnZXQpCitib29sIERPTVdpbmRvdzo6ZGlzcGF0
Y2hFdmVudChFdmVudCYgZXZlbnQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAgICAgUmVmPEV2
ZW50VGFyZ2V0PiBwcm90ZWN0KCp0aGlzKTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJw
RXZlbnQ7CiAKICAgICAvLyBQYXVzaW5nIGEgcGFnZSBtYXkgdHJpZ2dlciBwYWdlaGlkZSBhbmQg
cGFnZXNob3cgZXZlbnRzLiBXZWJDb3JlIGFsc28gaW1wbGljaXRseSBmaXJlcyB0aGVzZQogICAg
IC8vIGV2ZW50cyB3aGVuIGNsb3NpbmcgYSBXZWJWaWV3LiBIZXJlIHdlIGtlZXAgdHJhY2sgb2Yg
dGhlIHN0YXRlIG9mIHRoZSBwYWdlIHRvIHByZXZlbnQgZHVwbGljYXRlLAogICAgIC8vIHVuYmFs
YW5jZWQgZXZlbnRzIHBlciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcGFnZXNob3cgZXZlbnQ6CiAg
ICAgLy8gPGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsv
bXVsdGlwYWdlL2hpc3RvcnkuaHRtbCNldmVudC1wYWdlc2hvdz4uCi0gICAgaWYgKGV2ZW50LT5l
dmVudEludGVyZmFjZSgpID09IFBhZ2VUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VUeXBlKSB7Ci0g
ICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wYWdlc2hvd0V2ZW50KSB7
CisgICAgaWYgKGV2ZW50LmV2ZW50SW50ZXJmYWNlKCkgPT0gUGFnZVRyYW5zaXRpb25FdmVudElu
dGVyZmFjZVR5cGUpIHsKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
cGFnZXNob3dFdmVudCkgewogICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFn
ZVN0YXR1c1Nob3duKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBFdmVudCB3YXMg
cHJldmlvdXNseSBkaXNwYXRjaGVkOyBkbyBub3QgZmlyZSBhIGR1cGxpY2F0ZSBldmVudC4KICAg
ICAgICAgICAgIG1fbGFzdFBhZ2VTdGF0dXMgPSBQYWdlU3RhdHVzU2hvd247Ci0gICAgICAgIH0g
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCkgewor
ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZWhpZGVF
dmVudCkgewogICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFnZVN0YXR1c0hp
ZGRlbikKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRXZlbnQgd2FzIHByZXZpb3Vz
bHkgZGlzcGF0Y2hlZDsgZG8gbm90IGZpcmUgYSBkdXBsaWNhdGUgZXZlbnQuCiAgICAgICAgICAg
ICBtX2xhc3RQYWdlU3RhdHVzID0gUGFnZVN0YXR1c0hpZGRlbjsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGV2ZW50LT5zZXRUYXJnZXQocHJwVGFyZ2V0ID8gcHJwVGFyZ2V0IDogdGhpcyk7Ci0g
ICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KHRhcmdldCA/IHRhcmdl
dCA6IHRoaXMpOworICAgIGV2ZW50LnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgZXZlbnQu
c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKIAotICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNw
YXRjaEV2ZW50T25XaW5kb3coZnJhbWUoKSwgKmV2ZW50LCAqdGhpcyk7CisgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbERpc3BhdGNoRXZlbnRPbldpbmRvdyhmcmFtZSgpLCBldmVudCwgKnRoaXMpOwogCi0gICAg
Ym9vbCByZXN1bHQgPSBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQuZ2V0KCkpOworICAgIGJvb2wg
cmVzdWx0ID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50KTsKIAogICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hFdmVudE9uV2luZG93KGNvb2tpZSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5oCmluZGV4IDBkOGQ5NTM1YWI3NDNkOTI5Njc1YTViYzQwYjE0NDI4YjhjNTI3
ZWQuLmI1MDAxYmNmMWI3MDZmZTcwZWI0OGY0YTc4NzFlNzI2YjJiYTFhNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuaApAQCAtMjQ0LDcgKzI0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgLy8gTmVlZGVkIGZvciBPYmplY3RpdmUtQyBiaW5kaW5ncyAoc2VlIGJ1ZyAyODc3NCku
CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERP
TVdpbmRvdyYgc291cmNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgcG9zdE1lc3Nh
Z2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGltZXImKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaE1l
c3NhZ2VFdmVudFdpdGhPcmlnaW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5kZWRUYXJnZXRP
cmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2Fs
bFN0YWNrPik7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRoT3JpZ2luQ2hl
Y2soU2VjdXJpdHlPcmlnaW4qIGludGVuZGVkVGFyZ2V0T3JpZ2luLCBFdmVudCYsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpTY3JpcHRDYWxsU3RhY2s+KTsKIAogICAgICAgICB2b2lkIHNjcm9sbEJ5
KGludCB4LCBpbnQgeSkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2Nyb2xsVG8oaW50IHgsIGludCB5
KSBjb25zdDsKQEAgLTI3OCw3ICsyNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpIG92ZXJyaWRlOwogCiAgICAg
ICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgICAgICBib29sIGRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJn
ZXQ+IHBycFRhcmdldCk7CisgICAgICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYsIEV2ZW50
VGFyZ2V0Kik7CiAKICAgICAgICAgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmNwcAppbmRleCA5MjU3NTRlYzQzNjEwZTdhN2Y2
OTliNjg0ODE1MmU3MmM4NWFmNjIxLi4zYzM4NDMwOTU2MzQ5NjIyYWUyZTE5ZmQ1Yjc2MDM4NWM5
NTkwNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5jcHAKQEAgLTcx
LDkgKzcxLDggQEAgdm9pZCBEZXZpY2VDb250cm9sbGVyOjpyZW1vdmVBbGxEZXZpY2VFdmVudExp
c3RlbmVycyhET01XaW5kb3cqIHdpbmRvdykKICAgICAgICAgbV9jbGllbnQtPnN0b3BVcGRhdGlu
ZygpOwogfQogCi12b2lkIERldmljZUNvbnRyb2xsZXI6OmRpc3BhdGNoRGV2aWNlRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCit2b2lkIERldmljZUNvbnRyb2xsZXI6OmRpc3BhdGNo
RGV2aWNlRXZlbnQoRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBw
cnBFdmVudDsKICAgICBWZWN0b3I8UmVmUHRyPERPTVdpbmRvdz4+IGxpc3RlbmVyVmVjdG9yOwog
ICAgIGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycywgbGlzdGVuZXJWZWN0b3IpOwogICAgIGZvciAo
YXV0byYgbGlzdGVuZXIgOiBsaXN0ZW5lclZlY3RvcikgewpAQCAtOTMsOCArOTIsMTAgQEAgdm9p
ZCBEZXZpY2VDb250cm9sbGVyOjpmaXJlRGV2aWNlRXZlbnQoKQogICAgIG1fbGFzdEV2ZW50TGlz
dGVuZXJzLmNsZWFyKCk7CiAgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IGxpc3RlbmVyVmVjdG9y
KSB7CiAgICAgICAgIGF1dG8gZG9jdW1lbnQgPSBsaXN0ZW5lci0+ZG9jdW1lbnQoKTsKLSAgICAg
ICAgaWYgKGRvY3VtZW50ICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRl
ZCgpICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKLSAgICAgICAg
ICAgIGxpc3RlbmVyLT5kaXNwYXRjaEV2ZW50KGdldExhc3RFdmVudCgpKTsKKyAgICAgICAgaWYg
KGRvY3VtZW50ICYmICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpICYm
ICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkgeworICAgICAgICAgICAg
aWYgKGF1dG8gbGFzdEV2ZW50ID0gZ2V0TGFzdEV2ZW50KCkpCisgICAgICAgICAgICAgICAgbGlz
dGVuZXItPmRpc3BhdGNoRXZlbnQoKmxhc3RFdmVudCk7CisgICAgICAgIH0KICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmgKaW5kZXggZmRmNWQxZDk2ZDE1Nzc2
NzZjYTkwOWY5MTg5M2M1N2Y5ODA4YTVjZi4uMjE4NjFmMjRlNWU0MzhlNzAwMmQ3OWYxMjNlNjhi
Y2I5YmEwODg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmgKQEAgLTQ4
LDEyICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVEZXZpY2VFdmVudExpc3RlbmVy
KERPTVdpbmRvdyopOwogICAgIHZvaWQgcmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnMoRE9N
V2luZG93Kik7CiAKLSAgICB2b2lkIGRpc3BhdGNoRGV2aWNlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworICAgIHZvaWQgZGlzcGF0Y2hEZXZpY2VFdmVudChFdmVudCYpOwogICAgIGJvb2wgaXNB
Y3RpdmUoKSB7IHJldHVybiAhbV9saXN0ZW5lcnMuaXNFbXB0eSgpOyB9CiAgICAgRGV2aWNlQ2xp
ZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgdmlydHVhbCBib29sIGhh
c0xhc3REYXRhKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RXZl
bnQ+IGdldExhc3RFdmVudCgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVu
dD4gZ2V0TGFzdEV2ZW50KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCiBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBmaXJlRGV2aWNlRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAKaW5kZXggMDUwYjYyODk1YWVhNzM2NDlkMmFlNDY0ZTU5ZmM2ODNmMWE2YjlkMC4uZGFhMGY5
OGY5YzBhMjU2NmUxMDg5ZTUwZDlkZDU2MGI4ZWRmNzdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBib29sIERyYWdDb250cm9sbGVy
OjpkaXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9yKEZyYW1lKiBpbm5lckZyYW1lLCBEcmFnRGF0YSYg
ZHJhZwogICAgIEFTU0VSVChtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmhhc0NhcmV0KCkp
OwogICAgIFN0cmluZyB0ZXh0ID0gbV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpID8gZW1wdHlTdHJpbmcoKSA6IGRyYWdEYXRhLmFzUGxhaW5UZXh0
KCk7CiAgICAgTm9kZSogdGFyZ2V0ID0gaW5uZXJGcmFtZS0+ZWRpdG9yKCkuZmluZEV2ZW50VGFy
Z2V0RnJvbShtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmNhcmV0UG9zaXRpb24oKSk7Ci0g
ICAgcmV0dXJuIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3Ao
aW5uZXJGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIHRleHQpLCBJR05PUkVfRVhDRVBU
SU9OKTsKKyAgICByZXR1cm4gdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVudDo6Y3JlYXRl
Rm9yRHJvcChpbm5lckZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCkpOwogfQog
CiBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRhJiBkcmFnRGF0
YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2NzBlMTM1ZjNkMzRmZDMz
NjZkMzg4YTZlOTAwNmM3NWMxZWQ0ZmEzLi5iZjhmYmE3NTYxMGJjYzE1M2YzNjBiMmJjY2VjODcy
YWNlMTYyNDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMDEyLDEz
ICszMDEyLDEzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkKICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQg
a2V5RG93bkV2ZW50ID0gaW5pdGlhbEtleUV2ZW50OyAgICAKICAgICBpZiAoa2V5RG93bkV2ZW50
LnR5cGUoKSAhPSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICBrZXlEb3duRXZl
bnQuZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24sIGJh
Y2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpOwotICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBrZXlk
b3duID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleURvd25FdmVudCwgbV9mcmFtZS5kb2N1bWVu
dCgpLT5kZWZhdWx0VmlldygpKTsKKyAgICBSZWY8S2V5Ym9hcmRFdmVudD4ga2V5ZG93biA9IEtl
eWJvYXJkRXZlbnQ6OmNyZWF0ZShrZXlEb3duRXZlbnQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+ZGVm
YXVsdFZpZXcoKSk7CiAgICAgaWYgKG1hdGNoZWRBbkFjY2Vzc0tleSkKICAgICAgICAga2V5ZG93
bi0+c2V0RGVmYXVsdFByZXZlbnRlZCh0cnVlKTsKICAgICBrZXlkb3duLT5zZXRUYXJnZXQoZWxl
bWVudCk7CiAKICAgICBpZiAoaW5pdGlhbEtleUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50
OjpSYXdLZXlEb3duKSB7Ci0gICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93biwg
SUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93
bik7CiAgICAgICAgIC8vIElmIGZyYW1lIGNoYW5nZWQgYXMgYSByZXN1bHQgb2Yga2V5ZG93biBk
aXNwYXRjaCwgdGhlbiByZXR1cm4gdHJ1ZSB0byBhdm9pZCBzZW5kaW5nIGEgc3Vic2VxdWVudCBr
ZXlwcmVzcyBtZXNzYWdlIHRvIHRoZSBuZXcgZnJhbWUuCiAgICAgICAgIGJvb2wgY2hhbmdlZEZv
Y3VzZWRGcmFtZSA9IG1fZnJhbWUucGFnZSgpICYmICZtX2ZyYW1lICE9ICZtX2ZyYW1lLnBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgICAgIHJldHVy
biBrZXlkb3duLT5kZWZhdWx0SGFuZGxlZCgpIHx8IGtleWRvd24tPmRlZmF1bHRQcmV2ZW50ZWQo
KSB8fCBjaGFuZ2VkRm9jdXNlZEZyYW1lOwpAQCAtMzAyOSw3ICszMDI5LDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgaW5pdGlhbEtl
eUV2ZW50KQogICAgIC8vIGluIG9yZGVyIHRvIG1hdGNoIElFOgogICAgIC8vIDEuIHByZXZlbnRp
bmcgZGVmYXVsdCBoYW5kbGluZyBvZiBrZXlkb3duIGFuZCBrZXlwcmVzcyBldmVudHMgaGFzIG5v
IGVmZmVjdCBvbiBJTSBpbnB1dDsKICAgICAvLyAyLiBpZiBhbiBpbnB1dCBtZXRob2QgaGFuZGxl
cyB0aGUgZXZlbnQsIGl0cyBrZXlDb2RlIGlzIHNldCB0byAyMjkgaW4ga2V5ZG93biBldmVudC4K
LSAgICBtX2ZyYW1lLmVkaXRvcigpLmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihrZXlkb3duLmdl
dCgpKTsKKyAgICBtX2ZyYW1lLmVkaXRvcigpLmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihrZXlk
b3duLnB0cigpKTsKICAgICAKICAgICBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kID0ga2V5ZG93
bi0+ZGVmYXVsdEhhbmRsZWQoKTsKICAgICAKQEAgLTMwNDAsMTAgKzMwNDAsMTAgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgaW5pdGlh
bEtleUV2ZW50KQogICAgICAgICBrZXlkb3duLT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0K
ICAgICAKLSAgICBpZiAoYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihrZXlk
b3duLmdldCgpKSkKKyAgICBpZiAoYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlv
bihrZXlkb3duKSkKICAgICAgICAga2V5ZG93bi0+c3RvcFByb3BhZ2F0aW9uKCk7CiAKLSAgICBl
bGVtZW50LT5kaXNwYXRjaEV2ZW50KGtleWRvd24sIElHTk9SRV9FWENFUFRJT04pOworICAgIGVs
ZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93bik7CiAgICAgLy8gSWYgZnJhbWUgY2hhbmdlZCBh
cyBhIHJlc3VsdCBvZiBrZXlkb3duIGRpc3BhdGNoLCB0aGVuIHJldHVybiBlYXJseSB0byBhdm9p
ZCBzZW5kaW5nIGEgc3Vic2VxdWVudCBrZXlwcmVzcyBtZXNzYWdlIHRvIHRoZSBuZXcgZnJhbWUu
CiAgICAgYm9vbCBjaGFuZ2VkRm9jdXNlZEZyYW1lID0gbV9mcmFtZS5wYWdlKCkgJiYgJm1fZnJh
bWUgIT0gJm1fZnJhbWUucGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKICAgICBib29sIGtleWRvd25SZXN1bHQgPSBrZXlkb3duLT5kZWZhdWx0SGFuZGxlZCgp
IHx8IGtleWRvd24tPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBjaGFuZ2VkRm9jdXNlZEZyYW1lOwpA
QCAtMzA2MiwxNCArMzA2MiwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3Qg
UGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbml0aWFsS2V5RXZlbnQpCiAgICAga2V5UHJlc3NFdmVu
dC5kaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1FdmVudDo6Q2hhciwgYmFja3dhcmRD
b21wYXRpYmlsaXR5TW9kZSk7CiAgICAgaWYgKGtleVByZXNzRXZlbnQudGV4dCgpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGtleWRvd25SZXN1bHQ7Ci0gICAgUmVmUHRyPEtleWJvYXJkRXZl
bnQ+IGtleXByZXNzID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleVByZXNzRXZlbnQsIG1fZnJh
bWUuZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7CisgICAgUmVmPEtleWJvYXJkRXZlbnQ+IGtl
eXByZXNzID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleVByZXNzRXZlbnQsIG1fZnJhbWUuZG9j
dW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7CiAgICAga2V5cHJlc3MtPnNldFRhcmdldChlbGVtZW50
KTsKICAgICBpZiAoa2V5ZG93blJlc3VsdCkKICAgICAgICAga2V5cHJlc3MtPnNldERlZmF1bHRQ
cmV2ZW50ZWQodHJ1ZSk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAga2V5cHJlc3MtPmtleXBy
ZXNzQ29tbWFuZHMoKSA9IGtleWRvd24tPmtleXByZXNzQ29tbWFuZHMoKTsKICNlbmRpZgotICAg
IGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5cHJlc3MsIElHTk9SRV9FWENFUFRJT04pOworICAg
IGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5cHJlc3MpOwogCiAgICAgcmV0dXJuIGtleWRvd25S
ZXN1bHQgfHwga2V5cHJlc3MtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBrZXlwcmVzcy0+ZGVmYXVs
dEhhbmRsZWQoKTsKIH0KQEAgLTMxODYsNyArMzE4Niw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpo
YW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50Rm9yQWNjZXNzaWJpbGl0eShLZXlib2FyZEV2
ZW50CiAgICAgfQogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6YWNjZXNzaWJpbGl0eVByZXZlbnRz
RXZlbnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50KiBldmVudCkKK2Jvb2wgRXZlbnRIYW5kbGVy
OjphY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQmIGV2
ZW50KQogewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQoKSkKQEAgLTMxOTYsOSArMzE5
Niw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjphY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3Bv
Z2F0aW9uKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyBDaGVjayBmb3Iga2V5IGV2ZW50cyB0aGF0IGFyZSByZWxldmFudCB0byBhY2Nlc3NpYmls
aXR5OiB0YWIgYW5kIGFycm93cyBrZXlzIHRoYXQgY2hhbmdlIGZvY3VzCi0gICAgaWYgKGV2ZW50
LT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwOSIpCisgICAgaWYgKGV2ZW50LmtleUlkZW50aWZp
ZXIoKSA9PSAiVSswMDA5IikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uID0gZm9jdXNEaXJlY3Rpb25Gb3JLZXkoZXZlbnQtPmtleUlkZW50aWZpZXIo
KSk7CisgICAgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gZm9jdXNEaXJlY3Rpb25Gb3JLZXko
ZXZlbnQua2V5SWRlbnRpZmllcigpKTsKICAgICBpZiAoZGlyZWN0aW9uICE9IEZvY3VzRGlyZWN0
aW9uTm9uZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQpAQCAtMzQ5NCwxMCArMzQ5NCwx
MCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4dElucHV0RXZlbnQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBFdmVudCogdW5kZXJseWluZ0V2ZQogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBt
X2ZyYW1lLnZpZXcoKSkKICAgICAgICAgdmlldy0+ZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5n
VGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigpOwogCi0gICAgUmVmUHRyPFRleHRFdmVudD4gZXZl
bnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0
ZXh0LCBpbnB1dFR5cGUpOworICAgIFJlZjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50Ojpj
cmVhdGUobV9mcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgaW5wdXRUeXBlKTsK
ICAgICBldmVudC0+c2V0VW5kZXJseWluZ0V2ZW50KHVuZGVybHlpbmdFdmVudCk7CiAKLSAgICB0
YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgIHRhcmdl
dC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT5kZWZhdWx0SGFuZGxl
ZCgpOwogfQogICAgIApAQCAtMzg5OSwxMSArMzg5OSwxMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAg
ICAgICAgUmVmUHRyPFRvdWNoTGlzdD4gdGFyZ2V0VG91Y2hlcyhpc1RvdWNoQ2FuY2VsRXZlbnQg
PyBlbXB0eUxpc3QgOiB0b3VjaGVzQnlUYXJnZXQuZ2V0KHRvdWNoRXZlbnRUYXJnZXQpKTsKICAg
ICAgICAgICAgIEFTU0VSVCh0YXJnZXRUb3VjaGVzKTsKIAotICAgICAgICAgICAgUmVmUHRyPFRv
dWNoRXZlbnQ+IHRvdWNoRXZlbnQgPQorICAgICAgICAgICAgUmVmPFRvdWNoRXZlbnQ+IHRvdWNo
RXZlbnQgPQogICAgICAgICAgICAgICAgIFRvdWNoRXZlbnQ6OmNyZWF0ZShlZmZlY3RpdmVUb3Vj
aGVzLmdldCgpLCB0YXJnZXRUb3VjaGVzLmdldCgpLCBjaGFuZ2VkVG91Y2hlc1tzdGF0ZV0ubV90
b3VjaGVzLmdldCgpLAogICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWUsIHRvdWNoRXZlbnRU
YXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksCiAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIDAsIDAsIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5KCksIGV2ZW50
LnNoaWZ0S2V5KCksIGV2ZW50Lm1ldGFLZXkoKSk7Ci0gICAgICAgICAgICB0b3VjaEV2ZW50VGFy
Z2V0LT50b05vZGUoKS0+ZGlzcGF0Y2hUb3VjaEV2ZW50KHRvdWNoRXZlbnQuZ2V0KCkpOworICAg
ICAgICAgICAgdG91Y2hFdmVudFRhcmdldC0+dG9Ob2RlKCktPmRpc3BhdGNoVG91Y2hFdmVudCh0
b3VjaEV2ZW50KTsKICAgICAgICAgICAgIHN3YWxsb3dlZEV2ZW50ID0gc3dhbGxvd2VkRXZlbnQg
fHwgdG91Y2hFdmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IHRvdWNoRXZlbnQtPmRlZmF1bHRI
YW5kbGVkKCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApp
bmRleCAzZDU3NTg4NGE5YmE4NjA3YTc5YTdmZDQ3Yzc2ZDE3NDMyM2I5Mzg3Li4yNDM1ZGEwMTUx
MTgzYWU2ZDNmYWE5OWRlNDk3NjcxNTczYTkzYzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBrZXlFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmKTsKICAgICB2b2lkIGRlZmF1
bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Kik7CiAKLSAgICBib29sIGFjY2Vz
c2liaWxpdHlQcmV2ZW50c0V2ZW50UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVudCopOworICAgIGJv
b2wgYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50Jik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50
Rm9yQWNjZXNzaWJpbGl0eShLZXlib2FyZEV2ZW50Kik7CiAKICAgICBib29sIGhhbmRsZVRleHRJ
bnB1dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCA9IG51
bGxwdHIsIFRleHRFdmVudElucHV0VHlwZSA9IFRleHRFdmVudElucHV0S2V5Ym9hcmQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAppbmRleCA5ZjkwYjAxYjE1ODU0MDhmNjYwZDdiMWQw
MGVjOTZmYzgxMmZhZGI3Li40YTEwMTUxMmQ2ODY2Mzg4NjAwZWQ3MzJmYzNjYTg0MTZmN2E0MGJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcApAQCAtNDEwLDExICs0MTAsMTEgQEAg
Ym9vbCBFdmVudFNvdXJjZTo6Y2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gRXZlbnRTb3VyY2U6OmNy
ZWF0ZU1lc3NhZ2VFdmVudCgpCitSZWY8TWVzc2FnZUV2ZW50PiBFdmVudFNvdXJjZTo6Y3JlYXRl
TWVzc2FnZUV2ZW50KCkKIHsKLSAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudCA9IE1lc3Nh
Z2VFdmVudDo6Y3JlYXRlKCk7CisgICAgUmVmPE1lc3NhZ2VFdmVudD4gZXZlbnQgPSBNZXNzYWdl
RXZlbnQ6OmNyZWF0ZSgpOwogICAgIGV2ZW50LT5pbml0TWVzc2FnZUV2ZW50KG1fZXZlbnROYW1l
LmlzRW1wdHkoKSA/IGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQgOiBBdG9taWNTdHJpbmcobV9l
dmVudE5hbWUpLCBmYWxzZSwgZmFsc2UsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFN0
cmluZzo6YWRvcHQobV9kYXRhKSksIG1fZXZlbnRTdHJlYW1PcmlnaW4sIG1fbGFzdEV2ZW50SWQs
IDAsIDApOwotICAgIHJldHVybiBldmVudC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGV2ZW50Owog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKaW5k
ZXggZTQ5ZDY4ZTIzN2ZiOTllNjEwZTZkNmM3ZTM2YWM5ZDNhNGMyOGM2Yy4uMWQyNTQ1OGVlM2Qw
YmZhZGIxMjNiMDFiZjZmOWZlZGUwMjQzZGU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2Uu
aApAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWJvcnRDb25uZWN0aW9uQXR0
ZW1wdCgpOwogICAgIHZvaWQgcGFyc2VFdmVudFN0cmVhbSgpOwogICAgIHZvaWQgcGFyc2VFdmVu
dFN0cmVhbUxpbmUodW5zaWduZWQgcG9zLCBpbnQgZmllbGRMZW5ndGgsIGludCBsaW5lTGVuZ3Ro
KTsKLSAgICBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gY3JlYXRlTWVzc2FnZUV2ZW50KCk7Cisg
ICAgUmVmPE1lc3NhZ2VFdmVudD4gY3JlYXRlTWVzc2FnZUV2ZW50KCk7CiAKICAgICBVUkwgbV91
cmw7CiAgICAgYm9vbCBtX3dpdGhDcmVkZW50aWFsczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCAxZTdmZWQ3MDE3YWEyYjlkMjAxY2FkMDAxNzFjOTA2ODVjNTNkYzg0Li4zMWFjMzFl
MDJlYTIyNTlmOGUyODY3ZGE3Y2Y3NWRlN2YxNDNkOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC0zMTg0LDE0ICszMTg0LDE0IEBAIHZvaWQgRnJhbWVWaWV3OjpzZW5kUmVzaXpl
RXZlbnRJZk5lZWRlZCgpCiAgICAgYm9vbCBpc01haW5GcmFtZSA9IGZyYW1lKCkuaXNNYWluRnJh
bWUoKTsKICAgICBib29sIGNhblNlbmRSZXNpemVFdmVudFN5bmNocm9ub3VzbHkgPSBpc01haW5G
cmFtZSAmJiAhbV9zaG91bGRBdXRvU2l6ZTsKIAotICAgIFJlZlB0cjxFdmVudD4gcmVzaXplRXZl
bnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgZmFsc2UsIGZhbHNl
KTsKKyAgICBSZWY8RXZlbnQ+IHJlc2l6ZUV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkucmVzaXplRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGNhblNlbmRSZXNpemVFdmVu
dFN5bmNocm9ub3VzbHkpCi0gICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5k
b3dFdmVudChyZXNpemVFdmVudC5yZWxlYXNlKCkpOworICAgICAgICBmcmFtZSgpLmRvY3VtZW50
KCktPmRpc3BhdGNoV2luZG93RXZlbnQocmVzaXplRXZlbnQpOwogICAgIGVsc2UgewogICAgICAg
ICAvLyBGSVhNRTogUXVldWVpbmcgdGhpcyBldmVudCBmb3IgYW4gdW5wcmVkaWN0YWJsZSB0aW1l
IGluIHRoZSBmdXR1cmUgc2VlbXMKICAgICAgICAgLy8gaW50cmluc2ljYWxseSByYWN5LiBCeSB0
aGUgdGltZSB0aGlzIHJlc2l6ZSBldmVudCBmaXJlcywgdGhlIGZyYW1lIG1pZ2h0CiAgICAgICAg
IC8vIGJlIHJlc2l6ZWQgYWdhaW4sIHNvIHdlIGNvdWxkIGVuZCB1cCB3aXRoIHR3byByZXNpemUg
ZXZlbnRzIGZvciB0aGUgc2FtZSBzaXplLgotICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmVu
cXVldWVXaW5kb3dFdmVudChyZXNpemVFdmVudC5yZWxlYXNlKCkpOworICAgICAgICBmcmFtZSgp
LmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVudChXVEY6Om1vdmUocmVzaXplRXZlbnQpKTsK
ICAgICB9CiAKICAgICBpZiAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMo
KSAmJiBpc01haW5GcmFtZSkgewpAQCAtMzM3NywxMSArMzM3NywxMSBAQCB2b2lkIEZyYW1lVmll
dzo6dXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVy
dGljYWxPdmVyZgogICAgICAgICBtX2hvcml6b250YWxPdmVyZmxvdyA9IGhvcml6b250YWxPdmVy
ZmxvdzsKICAgICAgICAgbV92ZXJ0aWNhbE92ZXJmbG93ID0gdmVydGljYWxPdmVyZmxvdzsKIAot
ICAgICAgICBSZWZQdHI8T3ZlcmZsb3dFdmVudD4gb3ZlcmZsb3dFdmVudCA9IE92ZXJmbG93RXZl
bnQ6OmNyZWF0ZShob3Jpem9udGFsT3ZlcmZsb3dDaGFuZ2VkLCBob3Jpem9udGFsT3ZlcmZsb3cs
CisgICAgICAgIFJlZjxPdmVyZmxvd0V2ZW50PiBvdmVyZmxvd0V2ZW50ID0gT3ZlcmZsb3dFdmVu
dDo6Y3JlYXRlKGhvcml6b250YWxPdmVyZmxvd0NoYW5nZWQsIGhvcml6b250YWxPdmVyZmxvdywK
ICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmZsb3dDaGFuZ2VkLCB2ZXJ0aWNhbE92ZXJmbG93KTsK
ICAgICAgICAgb3ZlcmZsb3dFdmVudC0+c2V0VGFyZ2V0KHZpZXdwb3J0UmVuZGVyZXItPmVsZW1l
bnQoKSk7CiAKLSAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1ZXVlT3ZlcmZsb3dFdmVu
dChvdmVyZmxvd0V2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+
ZW5xdWV1ZU92ZXJmbG93RXZlbnQoV1RGOjptb3ZlKG92ZXJmbG93RXZlbnQpKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDkzYzcwNmMw
NzA0NWJiNmJiOWU1NGM4OTVjNjVkMDM2OTYxZjVkZDYuLmM2MWNjOGI2N2QzMmViM2YyNDZjYmY1
ZjEwY2E5Yzk3NmZmOGQ3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcApAQCAtMTY5LDkgKzE2OSw5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFob3Jpem9udGFs
TGF5b3V0T3ZlcmZsb3dDaGFuZ2VkICYmICF2ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hhbmdlZCkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQdHI8T3ZlcmZsb3dFdmVudD4gb3Zl
cmZsb3dFdmVudCA9IE92ZXJmbG93RXZlbnQ6OmNyZWF0ZShob3Jpem9udGFsTGF5b3V0T3ZlcmZs
b3dDaGFuZ2VkLCBoYXNIb3Jpem9udGFsTGF5b3V0T3ZlcmZsb3csIHZlcnRpY2FsTGF5b3V0T3Zl
cmZsb3dDaGFuZ2VkLCBoYXNWZXJ0aWNhbExheW91dE92ZXJmbG93KTsKKyAgICAgICAgUmVmPE92
ZXJmbG93RXZlbnQ+IG92ZXJmbG93RXZlbnQgPSBPdmVyZmxvd0V2ZW50OjpjcmVhdGUoaG9yaXpv
bnRhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzSG9yaXpvbnRhbExheW91dE92ZXJmbG93LCB2
ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hhbmdlZCwgaGFzVmVydGljYWxMYXlvdXRPdmVyZmxvdyk7
CiAgICAgICAgIG92ZXJmbG93RXZlbnQtPnNldFRhcmdldChtX2Jsb2NrLT5lbGVtZW50KCkpOwot
ICAgICAgICBtX2Jsb2NrLT5kb2N1bWVudCgpLmVucXVldWVPdmVyZmxvd0V2ZW50KG92ZXJmbG93
RXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgbV9ibG9jay0+ZG9jdW1lbnQoKS5lbnF1ZXVlT3Zl
cmZsb3dFdmVudChXVEY6Om1vdmUob3ZlcmZsb3dFdmVudCkpOwogICAgIH0KIAogcHJpdmF0ZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCmluZGV4IDA3MjEw
NzY5ZmQwNmJhOWNlODdhYzQ2NTJjOTllMmMxNzhkMjg0ZjEuLjdlYjU4YTI2YTQ4ZmY3MGVmZjll
NWY1NTNkNTZlNDA4ZmIxZjIyYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyRXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJF
dmVudFF1ZXVlLmNwcApAQCAtNDksOCArNDksOCBAQCBXb3JrZXJFdmVudFF1ZXVlOjp+V29ya2Vy
RXZlbnRRdWV1ZSgpCiBjbGFzcyBXb3JrZXJFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXIKIHsK
IHB1YmxpYzoKLSAgICBFdmVudERpc3BhdGNoZXIoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFdv
cmtlckV2ZW50UXVldWUmIGV2ZW50UXVldWUpCi0gICAgICAgIDogbV9ldmVudChldmVudCkKKyAg
ICBFdmVudERpc3BhdGNoZXIoUmVmUHRyPEV2ZW50PiYmIGV2ZW50LCBXb3JrZXJFdmVudFF1ZXVl
JiBldmVudFF1ZXVlKQorICAgICAgICA6IG1fZXZlbnQoV1RGOjptb3ZlKGV2ZW50KSkKICAgICAg
ICAgLCBtX2V2ZW50UXVldWUoZXZlbnRRdWV1ZSkKICAgICAgICAgLCBtX2lzQ2FuY2VsbGVkKGZh
bHNlKQogICAgIHsKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgICAgICBpZiAobV9pc0Nh
bmNlbGxlZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9ldmVudFF1ZXVlLm1fZXZl
bnREaXNwYXRjaGVyTWFwLnJlbW92ZShtX2V2ZW50LmdldCgpKTsKLSAgICAgICAgbV9ldmVudC0+
dGFyZ2V0KCktPmRpc3BhdGNoRXZlbnQobV9ldmVudCk7CisgICAgICAgIG1fZXZlbnQtPnRhcmdl
dCgpLT5kaXNwYXRjaEV2ZW50KCptX2V2ZW50KTsKICAgICAgICAgbV9ldmVudCA9IG51bGxwdHI7
CiAgICAgfQogCkBAIC04MywxMyArODMsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNDYW5j
ZWxsZWQ7CiB9OwogCi1ib29sIFdvcmtlckV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgV29ya2VyRXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFJl
ZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBpZiAobV9pc0Nsb3NlZCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgRXZlbnREaXNwYXRjaGVyKiBldmVudERpc3BhdGNoZXJQdHIgPSBuZXcg
RXZlbnREaXNwYXRjaGVyKGV2ZW50LmdldCgpLCAqdGhpcyk7Ci0gICAgbV9ldmVudERpc3BhdGNo
ZXJNYXAuYWRkKGV2ZW50LCBldmVudERpc3BhdGNoZXJQdHIpOworICAgIEV2ZW50RGlzcGF0Y2hl
ciogZXZlbnREaXNwYXRjaGVyUHRyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcihldmVudC5jb3B5UmVm
KCksICp0aGlzKTsKKyAgICBtX2V2ZW50RGlzcGF0Y2hlck1hcC5hZGQoZXZlbnQucHRyKCksIGV2
ZW50RGlzcGF0Y2hlclB0cik7CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnBvc3RUYXNr
KFtldmVudERpc3BhdGNoZXJQdHJdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewogICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnREaXNwYXRjaGVyPiBldmVudERpc3BhdGNoZXIoZXZlbnRE
aXNwYXRjaGVyUHRyKTsKICAgICAgICAgZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRjaCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuaAppbmRleCA5YTA1NzU2ODExOTI5
MjMwYjRiZWU1NzgwZGVjODQxOWQ1NWEyNDdlLi4zZGJmMzNkYjM4YjdjNzkzMzE4ZGJiZjFlNDg0
OTRmMDQyNmVjYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2
ZW50UXVldWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUu
aApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgV29ya2VyRXZlbnRRdWV1
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAgICAgdmlydHVhbCB+V29ya2VyRXZlbnRRdWV1
ZSgpOwogCi0gICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBjYW5jZWxFdmVudChFdmVudCYpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIGIvU291
cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcApp
bmRleCBhYjE3MDhmZTQ0MjVkMDFmNjUxNTgzOTMzNTQ3ZDljOWM3ZGI2ZTFkLi5jM2UxNTM4YjQy
NmNlMzU2NThjMDhiMzEyZDhmYzkxOTA1OTkwYTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKQEAg
LTgxLDI1ICs4MSwyNCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
OjpkaXNwYXRjaFRocm90dGxlZFByb2dyZXNzRXZlbnQoYm9vbCBsZQogICAgIG1faGFzVGhyb3R0
bGVkUHJvZ3Jlc3NFdmVudCA9IHRydWU7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KFJlZlB0cjxFdmVu
dD4mJiBldmVudCwgUHJvZ3Jlc3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2ZW50QWN0aW9uKQordm9p
ZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hSZWFkeVN0YXRl
Q2hhbmdlRXZlbnQoRXZlbnQmIGV2ZW50LCBQcm9ncmVzc0V2ZW50QWN0aW9uIHByb2dyZXNzRXZl
bnRBY3Rpb24pCiB7CiAgICAgaWYgKHByb2dyZXNzRXZlbnRBY3Rpb24gPT0gRmx1c2hQcm9ncmVz
c0V2ZW50KQogICAgICAgICBmbHVzaFByb2dyZXNzRXZlbnQoKTsKIAotICAgIGRpc3BhdGNoRXZl
bnQoV1RGOjptb3ZlKGV2ZW50KSk7CisgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKLXZv
aWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQoUmVm
UHRyPEV2ZW50PiYmIGV2ZW50KQordm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJv
dHRsZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGV2ZW50KTsK
ICAgICBpZiAobV9kZWZlckV2ZW50cykgewotICAgICAgICBpZiAobV9kZWZlcnJlZEV2ZW50cy5z
aXplKCkgPiAxICYmIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFu
Z2VFdmVudCAmJiBldmVudC0+dHlwZSgpID09IG1fZGVmZXJyZWRFdmVudHMubGFzdCgpLT50eXBl
KCkpIHsKKyAgICAgICAgaWYgKG1fZGVmZXJyZWRFdmVudHMuc2l6ZSgpID4gMSAmJiBldmVudC50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCAmJiBldmVudC50eXBl
KCkgPT0gbV9kZWZlcnJlZEV2ZW50cy5sYXN0KCktPnR5cGUoKSkgewogICAgICAgICAgICAgLy8g
UmVhZHlzdGF0ZWNoYW5nZSBldmVudHMgYXJlIHN0YXRlLWxlc3Mgc28gYXZvaWQgcmVwZWF0aW5n
IHR3byBpZGVudGljYWwgZXZlbnRzIGluIGEgcm93IG9uIHJlc3VtZS4KICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBtX2RlZmVycmVkRXZlbnRzLmFwcGVuZChXVEY6Om1v
dmUoZXZlbnQpKTsKKyAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOwogICAg
IH0gZWxzZQotICAgICAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChXVEY6Om1vdmUoZXZlbnQp
KTsKKyAgICAgICAgbV90YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQpAQCAtMTIwLDggKzExOSw3IEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZsdXNoUHJvZ3Jlc3NFdmVudCgpCiB7CiAg
ICAgaWYgKG1fZGVmZXJFdmVudHMgJiYgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpIHsKICAgICAg
ICAgLy8gTW92ZSB0aGUgcHJvZ3Jlc3MgZXZlbnQgdG8gdGhlIHF1ZXVlLCB0byBnZXQgaXQgaW4g
dGhlIHJpZ2h0IG9yZGVyIG9uIHJlc3VtZS4KLSAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBl
bmQobV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpOwotICAgICAgICBtX2RlZmVycmVkUHJvZ3Jlc3NF
dmVudCA9IG51bGxwdHI7CisgICAgICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKG1fZGVmZXJy
ZWRQcm9ncmVzc0V2ZW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xNDQsMTYgKzE0MiwxNSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlOjpkaXNwYXRjaERlZmVycmVkRXZlbnRzKCkKICAgICAvLyBUYWtlIG92ZXIgdGhl
IGRlZmVycmVkIGV2ZW50cyBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlbSB3aGljaCBjYW4gcG90ZW50
aWFsbHkgYWRkIG1vcmUuCiAgICAgYXV0byBkZWZlcnJlZEV2ZW50cyA9IFdURjo6bW92ZShtX2Rl
ZmVycmVkRXZlbnRzKTsKIAotICAgIFJlZlB0cjxFdmVudD4gZGVmZXJyZWRQcm9ncmVzc0V2ZW50
ID0gbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQ7Ci0gICAgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQg
PSBudWxscHRyOworICAgIFJlZlB0cjxFdmVudD4gZGVmZXJyZWRQcm9ncmVzc0V2ZW50ID0gV1RG
Ojptb3ZlKG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50KTsKIAogICAgIGZvciAoYXV0byYgZGVmZXJy
ZWRFdmVudCA6IGRlZmVycmVkRXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGRlZmVycmVk
RXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChkZWZlcnJlZEV2ZW50KTsK
IAogICAgIC8vIFRoZSBwcm9ncmVzcyBldmVudCB3aWxsIGJlIGluIHRoZSBtX2RlZmVycmVkRXZl
bnRzIHZlY3RvciBpZiB0aGUgbG9hZCB3YXMgZmluaXNoZWQgd2hpbGUgc3VzcGVuZGVkLgogICAg
IC8vIElmIG5vdCwganVzdCBzZW5kIHRoZSBtb3N0IHVwLXRvLWRhdGUgcHJvZ3Jlc3Mgb24gcmVz
dW1lLgogICAgIGlmIChkZWZlcnJlZFByb2dyZXNzRXZlbnQpCi0gICAgICAgIGRpc3BhdGNoRXZl
bnQoV1RGOjptb3ZlKGRlZmVycmVkUHJvZ3Jlc3NFdmVudCkpOworICAgICAgICBkaXNwYXRjaEV2
ZW50KCpkZWZlcnJlZFByb2dyZXNzRXZlbnQpOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudFRocm90dGxlOjpmaXJlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCmluZGV4IDI5ZjRkNjU1
ZDgzZDE2ZjYxNzBmZDU1ODc1NmQ1YTc2MTk1MDRmMDIuLmMxMDA5ZTUwZGI5MDhjYTQzM2NlNDVk
ZjUzZmU1MDc0ZWZhNzc2MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCkBAIC00OSw3ICs0OSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZSgp
OwogCiAgICAgdm9pZCBkaXNwYXRjaFRocm90dGxlZFByb2dyZXNzRXZlbnQoYm9vbCBsZW5ndGhD
b21wdXRhYmxlLCB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25nIGxvbmcg
dG90YWwpOwotICAgIHZvaWQgZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoUmVmUHRyPEV2
ZW50PiYmLCBQcm9ncmVzc0V2ZW50QWN0aW9uID0gRG9Ob3RGbHVzaFByb2dyZXNzRXZlbnQpOwor
ICAgIHZvaWQgZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoRXZlbnQmLCBQcm9ncmVzc0V2
ZW50QWN0aW9uID0gRG9Ob3RGbHVzaFByb2dyZXNzRXZlbnQpOwogICAgIHZvaWQgZGlzcGF0Y2hQ
cm9ncmVzc0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgdm9pZCBzdXNwZW5kKCk7
CkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7CiAg
ICAgdm9pZCBkaXNwYXRjaERlZmVycmVkRXZlbnRzKCk7CiAgICAgdm9pZCBmbHVzaFByb2dyZXNz
RXZlbnQoKTsKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnQoUmVmUHRyPEV2ZW50PiYmKTsKKyAgICB2
b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKTsKIAogICAgIGJvb2wgaGFzRXZlbnRUb0Rpc3BhdGNo
KCkgY29uc3Q7CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kZWZl
ckV2ZW50czsKICAgICBSZWZQdHI8RXZlbnQ+IG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50OwotICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX2RlZmVycmVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8
RXZlbnQ+PiBtX2RlZmVycmVkRXZlbnRzOwogICAgIFRpbWVyIG1fZGlzcGF0Y2hEZWZlcnJlZEV2
ZW50c1RpbWVyOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265364</attachid>
            <date>2015-11-11 21:55:24 -0800</date>
            <delta_ts>2015-11-11 21:55:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151158-20151111215519.patch</filename>
            <type>text/plain</type>
            <size>124487</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IwZjM1OGI3ODBmMmMy
MDU2NzM0ODA4ZjBiOTExOTE0ODI4Nzk0Ni4uZDMyOTU0NzA1ZjE4NjQ5M2M4ZWI2ZmZjNzk0YTkx
MGEwMjhkMTZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE1LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFz
c1JlZlB0ciB0byBkaXNwYXRjaEV2ZW50KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MTE1OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgU3RvcCBwYXNzaW5nIGEgUGFzc1JlZlB0ciB0byBkaXNwYXRj
aEV2ZW50KCkgYmVjYXVzZToKKyAgICAgICAgMS4gUGFzc1JlZlB0ciBpcyBsZWdhY3kgYW5kIHNo
b3VsZCBubyBsb25nZXIgYmUgdXNlZAorICAgICAgICAyLiBXZSBkb24ndCBhY3R1YWxseSB0cmFu
c2ZlciBvd25lcnNoaXAgb2YgdGhlIEV2ZW50IHRvIHRoZSBjYWxsZWUKKworICAgICAgICBQYXNz
IGEgQysrIHJlZmVyZW5jZSBpbnN0ZWFkLgorCiAyMDE1LTExLTExICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIGhhbmRsZS4qRXZlbnQgdG8gZGlz
cGF0Y2guKkV2ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkv
QmF0dGVyeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0Jh
dHRlcnlDb250cm9sbGVyLmNwcAppbmRleCBjZjgyYTM1NTI5Y2UzMDgwN2QxNjkwNjllNWQ3YWZj
YjhhNDFiZDllLi4yNTIxNWM5NzA0NmNlOWZlMmJmYWIxZTBiNGQwMWQxNGFiMTM1YjhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5Q29udHJvbGxl
ci5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBCYXR0ZXJ5Q29udHJvbGxlcjo6dXBkYXRlQmF0
dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGEKIAogdm9pZCBC
YXR0ZXJ5Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBiYXR0ZXJ5U3RhdHVzKQog
ewotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgZmFs
c2UsIGZhbHNlKTsKKyAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5
cGUsIGZhbHNlLCBmYWxzZSk7CiAgICAgUmVmUHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnkgPSBi
YXR0ZXJ5U3RhdHVzOwogICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycykKICAg
ICAgICAgbGlzdGVuZXItPmRpZENoYW5nZUJhdHRlcnlTdGF0dXMoZXZlbnQsIGJhdHRlcnkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5jcHAK
aW5kZXggM2MxZWE3NzQ1NmY0ZDJhOTY3NzdlNDlkYzY1MDExNGEyODY2NWY2Mi4uZDZkMTgwZTg1
NTYwYWNkM2Y3Yzc5Y2I1NTc3NGE4MDQxMDc5YzJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIGRv
dWJsZSBCYXR0ZXJ5TWFuYWdlcjo6bGV2ZWwoKQogICAgIHJldHVybiBtX2JhdHRlcnlTdGF0dXMg
PyBtX2JhdHRlcnlTdGF0dXMtPmxldmVsKCkgOiAxOwogfQogCi12b2lkIEJhdHRlcnlNYW5hZ2Vy
OjpkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQYXNzUmVm
UHRyPEJhdHRlcnlTdGF0dXM+IGJhdHRlcnlTdGF0dXMpCit2b2lkIEJhdHRlcnlNYW5hZ2VyOjpk
aWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKEV2ZW50JiBldmVudCwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3Rh
dHVzPiBiYXR0ZXJ5U3RhdHVzKQogewogICAgIHVwZGF0ZUJhdHRlcnlTdGF0dXMoYmF0dGVyeVN0
YXR1cyk7CiAgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2JhdHRlcnkvQmF0dGVyeU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFuYWdlci5oCmluZGV4IDc5YTAxZjkzNjliMDYzOTg4ZjZi
YzI3YzY5NjhjNzU1NGU4Y2RkYWYuLmQ0ZTNkMjYxNWUyNjEyMDg0NzA1YWQ2MmI1MWNiNTMyYTA4
YzI5MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5
TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYmF0dGVyeS9CYXR0ZXJ5TWFu
YWdlci5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgZGlzY2hhcmdpbmdU
aW1lKCk7CiAgICAgZG91YmxlIGxldmVsKCk7CiAKLSAgICB2b2lkIGRpZENoYW5nZUJhdHRlcnlT
dGF0dXMoUGFzc1JlZlB0cjxFdmVudD4sIFBhc3NSZWZQdHI8QmF0dGVyeVN0YXR1cz4pOworICAg
IHZvaWQgZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhFdmVudCYsIFBhc3NSZWZQdHI8QmF0dGVyeVN0
YXR1cz4pOwogICAgIHZvaWQgdXBkYXRlQmF0dGVyeVN0YXR1cyhQYXNzUmVmUHRyPEJhdHRlcnlT
dGF0dXM+KTsKICAgICB2b2lkIGJhdHRlcnlDb250cm9sbGVyRGVzdHJveWVkKCkgeyBtX2JhdHRl
cnlDb250cm9sbGVyID0gbnVsbHB0cjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBiODhlZGU1OGQ4
MWU0MDZjODAyZTUzZThhNDE4NzQ5YmQxMzM3YTk5Li5mODFmMzY1ODJkN2RiZmY1MjVlOGNlODdi
OWYwNTczODI3MWI0ODFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTM2LDMwICszNiwzMCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChF
dmVudCogZXZlbnQsIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYgZXZlbnRUYXJnZXRzKQor
Ym9vbCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50JiBldmVudCwgVmVjdG9yPFJl
ZlB0cjxFdmVudFRhcmdldD4+JiBldmVudFRhcmdldHMpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBl
dmVudFRhcmdldHMuc2l6ZSgpOwogICAgIEFTU0VSVChzaXplKTsKIAotICAgIGV2ZW50LT5zZXRF
dmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOworICAgIGV2ZW50LnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7CiAgICAgZm9yIChzaXplX3QgaSA9IHNpemUgLSAx
OyBpOyAtLWkpIHsgLy8gRG9uJ3QgZG8gdGhlIGZpcnN0IGVsZW1lbnQuCi0gICAgICAgIGV2ZW50
LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0c1tpXS5nZXQoKSk7CisgICAgICAgIGV2ZW50
LnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKICAgICAgICAgZXZlbnRU
YXJnZXRzW2ldLT5maXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOwotICAgICAgICBpZiAoZXZlbnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBpZiAoZXZlbnQucHJvcGFnYXRpb25TdG9w
cGVkKCkpCiAgICAgICAgICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKICAgICB9CiAKLSAgICBl
dmVudC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKLSAgICBldmVudC0+c2V0Q3Vy
cmVudFRhcmdldChldmVudFRhcmdldHNbMF0uZ2V0KCkpOworICAgIGV2ZW50LnNldEV2ZW50UGhh
c2UoRXZlbnQ6OkFUX1RBUkdFVCk7CisgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChldmVudFRh
cmdldHNbMF0uZ2V0KCkpOwogICAgIGV2ZW50VGFyZ2V0c1swXS0+ZmlyZUV2ZW50TGlzdGVuZXJz
KGV2ZW50KTsKLSAgICBpZiAoZXZlbnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpIHx8ICFldmVudC0+
YnViYmxlcygpIHx8IGV2ZW50LT5jYW5jZWxCdWJibGUoKSkKKyAgICBpZiAoZXZlbnQucHJvcGFn
YXRpb25TdG9wcGVkKCkgfHwgIWV2ZW50LmJ1YmJsZXMoKSB8fCBldmVudC5jYW5jZWxCdWJibGUo
KSkKICAgICAgICAgZ290byBkb25lRGlzcGF0Y2hpbmc7CiAKLSAgICBldmVudC0+c2V0RXZlbnRQ
aGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoRXZl
bnQ6OkJVQkJMSU5HX1BIQVNFKTsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNpemU7ICsr
aSkgeyAvLyBEb24ndCBkbyB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgZXZlbnQtPnNldEN1
cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRzW2ldLmdldCgpKTsKKyAgICAgICAgZXZlbnQuc2V0Q3Vy
cmVudFRhcmdldChldmVudFRhcmdldHNbaV0uZ2V0KCkpOwogICAgICAgICBldmVudFRhcmdldHNb
aV0tPmZpcmVFdmVudExpc3RlbmVycyhldmVudCk7Ci0gICAgICAgIGlmIChldmVudC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkgfHwgZXZlbnQtPmNhbmNlbEJ1YmJsZSgpKQorICAgICAgICBpZiAoZXZl
bnQucHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZlbnQuY2FuY2VsQnViYmxlKCkpCiAgICAgICAg
ICAgICBnb3RvIGRvbmVEaXNwYXRjaGluZzsKICAgICB9CiAKQEAgLTgyLDkgKzgyLDkgQEAgYm9v
bCBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKEV2ZW50KiBldmVudCwgVmVjdG9yPFJlZlB0
cjxFdmVudFRhcmdldD4+JiBldmUKICAgICAvLyAgICAgICAgZXZlbnQgb24gdGhlIHdpbmRvdyB1
bnRpbCB0aGF0IGhhcyBiZWVuIGltcGxlbWVudGVkKS4iIC0tIEpvbmFzIFNpY2tpbmcKIAogZG9u
ZURpc3BhdGNoaW5nOgotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOwotICAg
IGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOwotICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2
ZW50ZWQoKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOworICAgIGV2ZW50
LnNldEV2ZW50UGhhc2UoMCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggYTQ2MzkzZWQ4NmM0
YTYxZTU2OTY0NWM5NmM5MWM1NTA4MjY0ZWZmZi4uZWQ1OTU5NzVhY2I2NWFkNjcyZjUyODk5YWQw
MmYzYWYzZjMzNTAwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgRXZlbnRU
YXJnZXQ7CiAKIGNsYXNzIElEQkV2ZW50RGlzcGF0Y2hlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IGJvb2wgZGlzcGF0Y2goRXZlbnQqLCBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4mKTsgLy8g
VGhlIHRhcmdldCBmaXJzdCBhbmQgdGhlbiBpdHMgYW5jZXN0b3JzIGluIG9yZGVyIG9mIGhvdyB0
aGUgZXZlbnQgYnViYmxlcy4KKyAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaChFdmVudCYsIFZlY3Rv
cjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiYpOyAvLyBUaGUgdGFyZ2V0IGZpcnN0IGFuZCB0aGVuIGl0
cyBhbmNlc3RvcnMgaW4gb3JkZXIgb2YgaG93IHRoZSBldmVudCBidWJibGVzLgogCiBwcml2YXRl
OgogICAgIElEQkV2ZW50RGlzcGF0Y2hlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAppbmRleCBk
YmUwMDBmNTcxNGFlMjg4ZjA2MzQ4MjNlYzYzNWZmMTg0NGM4MWIzLi42MWIxNzdjODk4OGZkNzYz
ZmVkODIyNDE4ZDEzMGY2OTk1NDI3OTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtMzMx
LDcgKzMzMSw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQodWlu
dDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKICAgICAKICAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gSURC
VmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUoY3VycmVudFZlcnNpb24sIHJlcXVlc3RlZFZlcnNp
b24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpOwogICAgIGV2ZW50LT5zZXRUYXJn
ZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5x
dWV1ZUV2ZW50KGFkb3B0UmVmKCZldmVudC5sZWFrUmVmKCkpKTsKKyAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7
CiB9CiAKIHZvaWQgSURCRGF0YWJhc2U6OmRpZENyZWF0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRl
eEluZm8mIGluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcAppbmRleCA3NWI5NjVkOTBkMDE5ZTBmNTY4
YzQzYzdmZDhmOTVjMTFjOWVlZWVjLi45OGFlYWQ1ZTlkMTVmYTE2ZmFhNjdhZjhiMTMyNjFmYWNl
MmY5ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKQEAgLTE5NCwxNiArMTk0LDE0IEBAIHZvaWQg
SURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoJmV2ZW50LmdldCgpKTsKKyAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGOjpt
b3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVu
dCYgZXZlbnQpCiB7Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZl
bnQgLSAlcyIsIHBycEV2ZW50LT50eXBlKCkuY2hhcmFjdGVyczgoKSk7CisgICAgTE9HKEluZGV4
ZWREQiwgIklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQgLSAlcyIsIGV2ZW50LnR5cGUoKS5jaGFy
YWN0ZXJzOCgpKTsKIAotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKLQotICAg
IGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgaWYg
KGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQogICAgICAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKIAogICAgIFZlY3RvcjxSZWZQ
dHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOwpAQCAtMjE3LDcgKzIxNSw3IEBAIGJvb2wgSURCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBib29s
IGRvbnRQcmV2ZW50RGVmYXVsdDsKICAgICB7CiAgICAgICAgIFRyYW5zYWN0aW9uQWN0aXZhdG9y
IGFjdGl2YXRvcihtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgZG9udFByZXZlbnREZWZh
dWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7
CisgICAgICAgIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2goZXZlbnQsIHRhcmdldHMpOwogICAgIH0KIAogICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJSZXF1ZXN0SW1wbC5oCmluZGV4IGE0MmIxN2I0NDNjNDFjODNjYThlZjlkNmVkNDAy
MzM4ZjQyNjkyYzguLjI5MGUzOWM1YmQzYzk2YzYxOGM1OThmZjg0MDg0MDA1M2ZjMDNmNDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1
ZXN0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJSZXF1ZXN0SW1wbC5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZD
b3VudGVkPElEQlJlcXVlc3Q+OjpkZXJlZjsKIAogICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxF
dmVudD4mJik7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50
Jikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rp
b24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNw
cAppbmRleCAwZGMxYzRmNThlNDYyMjllYzE3YjUxNWIwMWIzMWQ2MmJlNDZjMDYwLi40YTQ3MTk0
YzM0OTk5MzkwYTdjOTdiYWY0MjNiZTRlN2E5ZDEwZmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25J
bXBsLmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmZpcmVPbkFi
b3J0KCkKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJvcnRF
dmVudCwgdHJ1ZSwgZmFsc2UpKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2
ZW50KFJlZjxFdmVudD4gZXZlbnQpCit2b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQo
UmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIEFTU0VSVChtX3N0YXRlICE9IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQpOwogCkBAIC0zNTQsMjIgKzM1NCwyMiBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiBldmVudCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoJmV2ZW50LmdldCgpKTsKKyAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RG
Ojptb3ZlKGV2ZW50KSk7CiB9CiAKLWJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCitib29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2
ZW50KEV2ZW50JiBldmVudCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmRpc3BhdGNoRXZlbnQiKTsKIAogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OwotICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09
IHRoaXMpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRl
RXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKIAogICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOwogICAgIHRhcmdldHMuYXBwZW5k
KHRoaXMpOwogICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOwogCi0gICAgcmV0dXJuIElEQkV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAgIHJldHVybiBJ
REJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LCB0YXJnZXRzKTsKIH0KIAogUmVmPElE
Qk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IGIzZDdi
M2NjMzY2ZDU4YWE3YTQ0YTE4ZDMyYTc3NjlkYjZlN2Q1MWMuLjA0MzYxOTU5MGMyNjcxNDFhMDc3
MzVkNWMxZDdiMTkxMDI3NjkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTcxLDcg
KzcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJy
aWRlIGZpbmFsIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgp
IG92ZXJyaWRlIGZpbmFsIHsgZGVyZWYoKTsgfQogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNw
YXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVu
dCYpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBhY3RpdmVET01P
YmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCBib29sIGNhblN1
c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKQEAgLTEyOCw3ICsxMjgs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmaXJlT25Db21wbGV0ZSgpOwogICAgIHZvaWQgZmly
ZU9uQWJvcnQoKTsKLSAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+KTsKKyAgICB2b2lk
IGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOwogCiAgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVl
c3RJbmRleFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJbmRleGVk
REI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0
YWJhc2UuY3BwCmluZGV4IGIwMTRlNjYyMWQyMGQxMTNjMWM3MTRjMzFhNzFkOTZmODMxZjg0MmQu
LmQwM2YxMjhjZDMxMWVkMjI5YmRjMzRjN2MwMWU1Y2UwZTExYjY3Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFi
YXNlLmNwcApAQCAtOTIsNyArOTIsNyBAQCBMZWdhY3lEYXRhYmFzZTo6fkxlZ2FjeURhdGFiYXNl
KCkKICAgICAgICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9u
dGVuZCBjb25uZWN0aW9uIGlzIGJlaW5nCiAgICAgICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBj
b3VsZCBmaXJlLgogICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykK
LSAgICAgICAgICAgIGNvbnRleHQtPmV2ZW50UXVldWUoKS5jYW5jZWxFdmVudCgqZXZlbnQpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZXZlbnRRdWV1ZSgpLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAg
ICB9CiB9CiAKQEAgLTMyMSw3ICszMjEsNyBAQCB2b2lkIExlZ2FjeURhdGFiYXNlOjpjbG9zZUNv
bm5lY3Rpb24oKQogICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZlcnNpb24sIGJ1dCB0aGUg
ZnJvbnRlbmQgY29ubmVjdGlvbiBpcyBiZWluZwogICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBj
b3VsZCBmaXJlLgogICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7Ci0g
ICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoKmV2ZW50KTsKKyAg
ICAgICAgYm9vbCByZW1vdmVkID0gZXZlbnRRdWV1ZS5jYW5jZWxFdmVudChldmVudCk7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7CiAgICAgfQogCkBAIC0zNDEsMjUg
KzM0MSwyNSBAQCB2b2lkIExlZ2FjeURhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UodWludDY0X3Qg
b2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKICAgICBlbnF1ZXVlRXZlbnQoTGVnYWN5
VmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgZXZlbnRO
YW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCkpOwogfQogCi12b2lkIExlZ2FjeURhdGFiYXNlOjpl
bnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit2b2lkIExlZ2FjeURhdGFiYXNl
OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIEFTU0VSVCghbV9jb250
ZXh0U3RvcHBlZCk7CiAgICAgQVNTRVJUKCFtX2lzQ2xvc2VkKTsKICAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5n
ZXQoKSk7Ci0gICAgbV9lbnF1ZXVlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5jb3B5UmVm
KCkpOworICAgIG1fZW5xdWV1ZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkpOwogfQog
Ci1ib29sIExlZ2FjeURhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQorYm9vbCBMZWdhY3lEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudCIpOwot
ICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZl
bnQpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFu
Z2VFdmVudCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLmdldCgpID09IGV2
ZW50LmdldCgpKQorICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5wdHIoKSA9PSAmZXZl
bnQpCiAgICAgICAgICAgICBtX2VucXVldWVkRXZlbnRzLnJlbW92ZShpKTsKICAgICB9Ci0gICAg
cmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKKyAgICByZXR1
cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiBpbnQ2NF90IExlZ2Fj
eURhdGFiYXNlOjpmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5
RGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdh
Y3lEYXRhYmFzZS5oCmluZGV4IDExMzdlNWUzMDAyNDQxODFlMjE4ZTQ5ZjNkNTdiYjdjZDU4ZTY3
N2QuLmVhMWViNWYyM2RhMGY1NjZkOTYzMzY4YTY4YmMzMWFmNDRmZGIyNjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRh
YmFzZS5oCkBAIC04NCwxMCArODQsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNDbG9zZVBlbmRp
bmcoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlUGVuZGluZzsgfQogICAgIHZvaWQgZm9yY2VDbG9z
ZSgpOwogICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX21ldGFkYXRhOyB9Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAKICAgICB1c2luZyBF
dmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnQmKSBvdmVycmlkZTsKIAogICAgIGludDY0X3QgZmluZE9iamVjdFN0b3JlSWQo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAK
ICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB2ZXJzaW9uY2hhbmdlIGV2ZW50cyB3YWl0aW5nIHRv
IGJlIGZpcmVkIG9uIHRoaXMKICAgICAvLyBkYXRhYmFzZSBzbyB0aGF0IHdlIGNhbiBjYW5jZWwg
dGhlbSBpZiB0aGUgZGF0YWJhc2UgY2xvc2VzLgotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBt
X2VucXVldWVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX2VucXVldWVkRXZlbnRz
OwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcAppbmRleCAzMjkwYzUwZjA0MmU5MGVm
MmVhYmE3Mjc1ODBlNzIzOTM0ODI2NTZkLi43MjE3YmMzZTRkYTcyYmM2YjRjNzZlZWQ5NWFmNzcx
NWM0NjFhZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwCkBAIC0xMzgsMTEgKzEz
OCwxMSBAQCBib29sIExlZ2FjeU9wZW5EQlJlcXVlc3Q6OnNob3VsZEVucXVldWVFdmVudCgpIGNv
bnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5T3BlbkRCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgTGVnYWN5T3BlbkRCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgLy8gSWYgdGhlIGNvbm5l
Y3Rpb24gY2xvc2VkIGJldHdlZW4gb25VcGdyYWRlTmVlZGVkIGFuZCB0aGUgZGVsaXZlcnkgb2Yg
dGhlICJzdWNjZXNzIiBldmVudCwKICAgICAvLyBhbiAiZXJyb3IiIGV2ZW50IHNob3VsZCBiZSBm
aXJlZCBpbnN0ZWFkLgotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQgJiYgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkRhdGFiYXNl
ICYmIG1fcmVzdWx0LT5sZWdhY3lEYXRhYmFzZSgpLT5pc0Nsb3NlUGVuZGluZygpKSB7CisgICAg
aWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50ICYmIG1fcmVzdWx0
LT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSAmJiBtX3Jlc3VsdC0+bGVnYWN5
RGF0YWJhc2UoKS0+aXNDbG9zZVBlbmRpbmcoKSkgewogICAgICAgICBtX3Jlc3VsdCA9IG51bGxw
dHI7CiAgICAgICAgIG9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4iKSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5oCmluZGV4IDVhNTkz
YjVmNmVhYzcwZGI3ZDMwMmIwNmU4OWNlYmUzODQ4ZGU0NWYuLjY0ZjY2YzQwYjA3ODMzNTY3MWEz
YWI4ZGI4YjlkZTdiZGNhY2JhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuaApAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgRXZl
bnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSBm
aW5hbDsKLSAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikg
b3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBv
dmVycmlkZSBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbnF1
ZXVlRXZlbnQoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1ZXN0LmNwcAppbmRleCBhM2MyMDIw
YjAwMGI3MzRlZDZjYTdhMzNlZTM5NmVkODhhOGVlNTFjLi4yYzc0N2E1NmFhYWQ1M2NmN2Q0ZDNh
M2RkMDg0ZjhkNWYzMmE5YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCkBAIC0xNjYsNyArMTY2LDcg
QEAgdm9pZCBMZWdhY3lSZXF1ZXN0OjphYm9ydCgpCiAKICAgICBFdmVudFF1ZXVlJiBldmVudFF1
ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CiAgICAgZm9yIChh
dXRvJiBldmVudCA6IG1fZW5xdWV1ZWRFdmVudHMpIHsKLSAgICAgICAgYm9vbCByZW1vdmVkID0g
ZXZlbnRRdWV1ZS5jYW5jZWxFdmVudCgqZXZlbnQpOworICAgICAgICBib29sIHJlbW92ZWQgPSBl
dmVudFF1ZXVlLmNhbmNlbEV2ZW50KGV2ZW50KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1v
dmVkLCByZW1vdmVkKTsKICAgICB9CiAgICAgbV9lbnF1ZXVlZEV2ZW50cy5jbGVhcigpOwpAQCAt
MjYyLDcgKzI2Miw3IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6b25FcnJvcihQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yKQogICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPEV2ZW50PiBjcmVhdGVTdWNjZXNzRXZlbnQoKQorc3RhdGljIFJlZjxFdmVudD4gY3JlYXRl
U3VjY2Vzc0V2ZW50KCkKIHsKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
c3VjY2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2UpOwogfQpAQCAtNDY2LDcgKzQ2Niw3IEBAIEV2ZW50
VGFyZ2V0SW50ZXJmYWNlIExlZ2FjeVJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3QKICAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKIH0KIAot
Ym9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQorYm9vbCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIHsKICAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQiKTsKICAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nKTsKQEAg
LTQ3NCwxNiArNDc0LDE2IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZpdHkpOwog
ICAgIEFTU0VSVChtX2VucXVldWVkRXZlbnRzLnNpemUoKSk7CiAgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSA9PSB0aGlzKTsK
LSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVhZHlTdGF0ZSA8IElEQlJlcXVlc3RSZWFkeVN0
YXRlOjpEb25lLCAiV2hlbiBkaXNwYXRjaGluZyBldmVudCAlcywgbV9yZWFkeVN0YXRlIDwgRE9O
RSglZCksIHdhcyAlZCIsIGV2ZW50LT50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSksIHN0YXRpY19jYXN0PGlu
dD4obV9yZWFkeVN0YXRlKSk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZWFkeVN0YXRlIDwgSURCUmVxdWVzdFJlYWR5U3Rh
dGU6OkRvbmUsICJXaGVuIGRpc3BhdGNoaW5nIGV2ZW50ICVzLCBtX3JlYWR5U3RhdGUgPCBET05F
KCVkKSwgd2FzICVkIiwgZXZlbnQudHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRp
Y19jYXN0PGludD4oSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpLCBzdGF0aWNfY2FzdDxpbnQ+
KG1fcmVhZHlTdGF0ZSkpOwogCiAgICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3Jl
cXVlc3RTdGF0ZSk7CiAKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxv
Y2tlZEV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRF
dmVudCkKICAgICAgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0uZ2V0KCkgPT0gZXZlbnQuZ2V0
KCkpCisgICAgICAgIGlmIChtX2VucXVldWVkRXZlbnRzW2ldLnB0cigpID09ICZldmVudCkKICAg
ICAgICAgICAgIG1fZW5xdWV1ZWRFdmVudHMucmVtb3ZlKGkpOwogICAgIH0KIApAQCAtNTAwLDcg
KzUwMCw3IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKIAogICAgIC8vIEN1cnNvciBwcm9wZXJ0aWVzIHNob3VsZCBub3QgdXBkYXRl
ZCB1bnRpbCB0aGUgc3VjY2VzcyBldmVudCBpcyBiZWluZyBkaXNwYXRjaGVkLgogICAgIFJlZlB0
cjxMZWdhY3lDdXJzb3I+IGN1cnNvclRvTm90aWZ5OwotICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpIHsKICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBnZXRS
ZXN1bHRDdXJzb3IoKTsKICAgICAgICAgaWYgKGN1cnNvclRvTm90aWZ5KSB7CiAgICAgICAgICAg
ICBjdXJzb3JUb05vdGlmeS0+c2V0VmFsdWVSZWFkeShyZXF1ZXN0U3RhdGUoKSwgbV9jdXJzb3JL
ZXkucmVsZWFzZSgpLCBtX2N1cnNvclByaW1hcnlLZXkucmVsZWFzZSgpLCBtX2N1cnNvclZhbHVl
KTsKQEAgLTUwOCwxOSArNTA4LDE5IEBAIGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpIHsKKyAgICBp
ZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpIHsKICAg
ICAgICAgQVNTRVJUKCFtX2RpZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQpOwogICAgICAgICBtX2Rp
ZEZpcmVVcGdyYWRlTmVlZGVkRXZlbnQgPSB0cnVlOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBX
aGVuIHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHByb2JhYmx5
IG5lZWQgdG8gY2hhbmdlLgotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmVycm9yRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2
ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCwg
ImV2ZW50IHR5cGUgd2FzICVzIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICBjb25zdCBib29sIHNldFRyYW5zYWN0aW9uQWN0aXZlID0gbV90cmFuc2FjdGlvbiAm
JiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCB8fCAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBtX2Vycm9yQ29kZSAhPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxv
Y2tlZEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2
ZW50LCAiZXZlbnQgdHlwZSB3YXMgJXMiLCBldmVudC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgY29uc3QgYm9vbCBzZXRUcmFuc2FjdGlvbkFjdGl2ZSA9IG1fdHJhbnNhY3Rp
b24gJiYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50IHx8IChldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgbV9lcnJvckNvZGUgIT0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIAogICAgIGlmIChzZXRUcmFuc2FjdGlvbkFjdGl2
ZSkKICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0QWN0aXZlKHRydWUpOwogCi0gICAgYm9vbCBk
b250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50Lmdl
dCgpLCB0YXJnZXRzKTsKKyAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogCiAgICAgaWYgKG1fdHJhbnNhY3Rp
b24pIHsKICAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6
RG9uZSkKQEAgLTUyOCw3ICs1MjgsNyBAQCBib29sIExlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAKICAgICAgICAgLy8gUG9zc2libHkgYWJvcnQg
dGhlIHRyYW5zYWN0aW9uLiBUaGlzIG11c3Qgb2NjdXIgYWZ0ZXIgdW5yZWdpc3RlcmluZyAoc28g
dGhpcyByZXF1ZXN0CiAgICAgICAgIC8vIGRvZXNuJ3QgcmVjZWl2ZSBhIHNlY29uZCBlcnJvcikg
YW5kIGJlZm9yZSBkZWFjdGl2YXRpbmcgKHdoaWNoIG1pZ2h0IHRyaWdnZXIgY29tbWl0KS4KLSAg
ICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9u
dFByZXZlbnREZWZhdWx0ICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7CisgICAgICAgIGlmIChldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9udFByZXZlbnREZWZhdWx0
ICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5zZXRF
cnJvcihtX2Vycm9yLCBtX2Vycm9yTWVzc2FnZSk7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9u
LT5hYm9ydChJR05PUkVfRVhDRVBUSU9OKTsKICAgICAgICAgfQpAQCAtNTQxLDcgKzU0MSw3IEBA
IGJvb2wgTGVnYWN5UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpCiAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5wb3N0
U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpOwogCi0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJREJS
ZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSAmJiAoIWN1cnNvclRvTm90aWZ5IHx8IG1fY3Vyc29yRmlu
aXNoZWQpICYmIGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVu
dCkKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lICYm
ICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JGaW5pc2hlZCkgJiYgZXZlbnQudHlwZSgpICE9
IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpCiAgICAgICAgIG1faGFzUGVuZGluZ0Fj
dGl2aXR5ID0gZmFsc2U7CiAKICAgICByZXR1cm4gZG9udFByZXZlbnREZWZhdWx0OwpAQCAtNTY1
LDcgKzU2NSw3IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6dHJhbnNhY3Rpb25EaWRGaW5pc2hBbmRE
aXNwYXRjaCgpCiAgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRp
bmc7CiB9CiAKLXZvaWQgTGVnYWN5UmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQordm9pZCBMZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYm
IGV2ZW50KQogewogICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3Rh
dGU6OlBlbmRpbmcgfHwgbV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25l
KTsKIApAQCAtNTc2LDggKzU3Niw4IEBAIHZvaWQgTGVnYWN5UmVxdWVzdDo6ZW5xdWV1ZUV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogCiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsK
IAotICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVl
RXZlbnQoZXZlbnQuZ2V0KCkpKQotICAgICAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVuZChldmVu
dCk7CisgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVl
dWVFdmVudChldmVudC5jb3B5UmVmKCkpKQorICAgICAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVu
ZChXVEY6Om1vdmUoZXZlbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVl
c3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1
ZXN0LmgKaW5kZXggNWFlZmIxMWQyMjgyYzc3ODFmYTZmOWQ2ODY3ZTY4ODU2ZjU3OTgzMS4uZWIx
ZmJhZWYyYWU2MjY1ZTMyMTdiYmFjZTVmMWMwN2U1ZmQxYmNiYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oCkBA
IC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdW5jYXVnaHRFeGNlcHRp
b25JbkV2ZW50SGFuZGxlcigpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdXNpbmcgRXZlbnRUYXJn
ZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2
ZW50Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHRyYW5zYWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0
Y2goKTsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIExl
Z2FjeVJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIExlZ2FjeVRyYW5zYWN0aW9u
Kik7Ci0gICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQg
ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CiAgICAgdmlydHVhbCBib29sIHNob3VsZEVucXVl
dWVFdmVudCgpIGNvbnN0OwogICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKICAgICB2b2lkIG9uU3VjY2Vzc0ludGVybmFsKGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CkBAIC0xMzksNyArMTM5LDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7CiAKICAg
ICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5OwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBt
X2VucXVldWVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX2VucXVldWVkRXZlbnRz
OwogCiAgICAgLy8gT25seSB1c2VkIGlmIHRoZSByZXN1bHQgdHlwZSB3aWxsIGJlIGEgY3Vyc29y
LgogICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5z
YWN0aW9uLmNwcAppbmRleCBmMGIzNGEwZGU4MjY1ODg4YzBhNGQzOGE2MWFlZTE5ZGI2NGNiN2Ix
Li5jZTg0OWZkM2Y3NjRhNDVmZTgwMWNhZGUyMTA2ZGVkMDE1ZTNiNGViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lU
cmFuc2FjdGlvbi5jcHAKQEAgLTMwNiwxMyArMzA2LDEzIEBAIGJvb2wgTGVnYWN5VHJhbnNhY3Rp
b246Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faGFzUGVuZGluZ0Fj
dGl2aXR5ICYmICFtX2NvbnRleHRTdG9wcGVkOwogfQogCi1ib29sIExlZ2FjeVRyYW5zYWN0aW9u
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBMZWdhY3lUcmFu
c2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOwogICAgIEFTU0VSVChtX3N0
YXRlICE9IEZpbmlzaGVkKTsKICAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZpdHkpOwogICAg
IEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFTU0VSVChldmVudC0+dGFy
Z2V0KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOwogICAg
IG1fc3RhdGUgPSBGaW5pc2hlZDsKIAogICAgIC8vIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCkBA
IC0zMjgsOCArMzI4LDggQEAgYm9vbCBMZWdhY3lUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICB0YXJnZXRzLmFwcGVuZChkYigpKTsKIAogICAg
IC8vIEZJWE1FOiBXaGVuIHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3
aWxsIHByb2JhYmx5IG5lZWQgdG8gY2hhbmdlLgotICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmFib3J0RXZlbnQpOwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBJREJFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKyAgICBBU1NFUlQoZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYWJvcnRFdmVudCk7CisgICAgYm9vbCByZXR1cm5WYWx1ZSA9IElEQkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwogICAgIC8vIEZJWE1FOiBUcnkgdG8g
Y29uc3RydWN0IGEgdGVzdCB3aGVyZSB8dGhpc3wgb3V0bGl2ZXMgb3BlbkRCUmVxdWVzdCBhbmQg
d2UKICAgICAvLyBnZXQgYSBjcmFzaC4KICAgICBpZiAobV9vcGVuREJSZXF1ZXN0KSB7CkBAIC0z
NTksMTQgKzM1OSwxNCBAQCBjb25zdCBjaGFyKiBMZWdhY3lUcmFuc2FjdGlvbjo6YWN0aXZlRE9N
T2JqZWN0TmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuICJMZWdhY3lUcmFuc2FjdGlvbiI7CiB9CiAK
LXZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKK3ZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYg
ZXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3N0YXRlICE9IEZpbmlzaGVkLCAi
QSBmaW5pc2hlZCB0cmFuc2FjdGlvbiB0cmllZCB0byBlbnF1ZXVlIGFuIGV2ZW50IG9mIHR5cGUg
JXMuIiwgZXZlbnQtPnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9j
b250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudCk7CisgICAgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVu
dCkpOwogfQogCiBJREJEYXRhYmFzZUJhY2tlbmQqIExlZ2FjeVRyYW5zYWN0aW9uOjpiYWNrZW5k
REIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaAppbmRleCA4M2I3OTcxMTVlNzliN2VmMWJj
Y2M1YWE0MDM3MGUyMzc1YWU5NDIyLi5mNzlkZWMzMzM5NWRhMmE1YmQ2NjMzYTYyM2M4M2EzZjk3
MDc1NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5VHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNhY3Rpb24uaApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRj
aEV2ZW50OwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYp
IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVhbCBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwpAQCAtMTA0LDcg
KzEwNCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTGVnYWN5VHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGludDY0X3QsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUsIExlZ2FjeURhdGFiYXNlKiwgTGVnYWN5T3BlbkRCUmVxdWVz
dCosIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKTsKIAotICAgIHZvaWQgZW5xdWV1ZUV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYp
OwogICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOwogCiAgICAgdm9pZCByZWdpc3Rlck9wZW5D
dXJzb3IoTGVnYWN5Q3Vyc29yKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW0uY3BwCmluZGV4IGMzY2MzODFhODhhMDJhODgyNzFmZGI3ZDQy
NTUxYTAzZWRjNTE3OGIuLjA0NDM0MGY3YTk4Yjg4ZmNlZTE2NzVkYTE5YTIxNGZkZjQ1NDQ5NzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW0uY3BwCkBAIC0yOTksMTMgKzI5OSwxMSBAQCB2b2lkIE1lZGlhU3RyZWFtOjpzY2hlZHVsZUFj
dGl2ZVN0YXRlQ2hhbmdlKCkKIAogdm9pZCBNZWRpYVN0cmVhbTo6YWN0aXZpdHlFdmVudFRpbWVy
RmlyZWQoKQogewotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CisgICAgVmVjdG9y
PFJlZjxFdmVudD4+IGV2ZW50czsKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEFjdGl2aXR5
RXZlbnRzKTsKIAogICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHMpCi0gICAgICAgIGRpc3Bh
dGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpKTsKLQotICAgIGV2ZW50cy5jbGVhcigpOworICAgICAg
ICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogVVJMUmVnaXN0cnkmIE1lZGlhU3RyZWFtOjpy
ZWdpc3RyeSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtLmgKaW5kZXggMzFhNDYxODRmMzIwMTdjMTBlMjc1ZTEwODhlYmNhMmQ5YTli
ZDU4ZC4uMWE0NTY0NzZiOGVjMzc2OTc2NmNmZmQwZTRmMmJhNWVjZGFiNWFhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0uaApAQCAtMTI4
LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0
cmVhbVRyYWNrPj4gbV90cmFja1NldDsKIAogICAgIFRpbWVyIG1fYWN0aXZpdHlFdmVudFRpbWVy
OwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEFjdGl2aXR5RXZlbnRzOwor
ICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX3NjaGVkdWxlZEFjdGl2aXR5RXZlbnRzOwogCiAgICAg
VmVjdG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAKaW5kZXggNTI3YjVkMTlk
OTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4YmNkNWQ5OS4uYzllMmNjYWM1YzFhNjM3Y2FlMjUyZWFh
ZTM5ZTE4ZWRhYWJkNGUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC0xNDUsOSArMTQ1LDkgQEAgYm9vbCBSVENE
VE1GU2VuZGVyOjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgUlRDRFRNRlNlbmRlcjo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBSVENEVE1GU2VuZGVyOjpzY2hlZHVsZURpc3BhdGNo
RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewotICAgIG1fc2NoZWR1bGVkRXZlbnRzLmFwcGVu
ZChldmVudCk7CisgICAgbV9zY2hlZHVsZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkp
OwogCiAgICAgaWYgKCFtX3NjaGVkdWxlZEV2ZW50VGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV9zY2hlZHVsZWRFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKQEAgLTE1OCwxMSArMTU4LDEx
IEBAIHZvaWQgUlRDRFRNRlNlbmRlcjo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKCkKICAgICBp
ZiAobV9zdG9wcGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50
Pj4gZXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBldmVudHM7CiAgICAgZXZlbnRzLnN3
YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCiAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykK
LSAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaAppbmRleCAwMjNl
ODI3OTdiNjM0NTBkYWZjMzQ0YzgyNmE2NzNkOTNjM2NmZDNjLi5hYTVkZGE5MWJiOGY0OTQ1NmZh
N2RlOGJmZTRmZmFmYTZmMDM1NjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5kZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgog
ICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKICAg
ICBib29sIGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZv
aWQgc2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2b2lkIHNj
aGVkdWxlRGlzcGF0Y2hFdmVudChSZWY8RXZlbnQ+JiYpOwogICAgIHZvaWQgc2NoZWR1bGVkRXZl
bnRUaW1lckZpcmVkKCk7CiAKICAgICAvLyBFdmVudFRhcmdldApAQCAtOTAsNyArOTAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zdG9wcGVkOwogCiAgICAgVGltZXIgbV9zY2hlZHVsZWRFdmVu
dFRpbWVyOwotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKKyAg
ICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9zY2hlZHVsZWRFdmVudHM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0RhdGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDRGF0YUNoYW5uZWwuY3BwCmluZGV4IGQ3NzA4Y2EwNWJlYWQxNDE2NzdmYzg0NWE5YzMz
NzZlNjQ0ZmQzMTQuLjU1ZjUwODYxNjg2YzFkNmVhYmQyMDUzNDBlZDM4MzVhNjgyNWE0MjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5u
ZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwCkBAIC0zMDQsOSArMzA0LDkgQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c3RvcCgp
CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbnVsbHB0cjsKIH0KIAotdm9pZCBSVENE
YXRhQ2hhbm5lbDo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQordm9pZCBSVENEYXRhQ2hhbm5lbDo6c2NoZWR1bGVEaXNwYXRjaEV2ZW50KFJlZjxFdmVudD4m
JiBldmVudCkKIHsKLSAgICBtX3NjaGVkdWxlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOworICAgIG1f
c2NoZWR1bGVkRXZlbnRzLmFwcGVuZChXVEY6Om1vdmUoZXZlbnQpKTsKIAogICAgIGlmICghbV9z
Y2hlZHVsZWRFdmVudFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc2NoZWR1bGVkRXZlbnRU
aW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC0zMTcsMTEgKzMxNywxMSBAQCB2b2lkIFJUQ0RhdGFD
aGFubmVsOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAgIGlmIChtX3N0b3BwZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CisgICAg
VmVjdG9yPFJlZjxFdmVudD4+IGV2ZW50czsKICAgICBldmVudHMuc3dhcChtX3NjaGVkdWxlZEV2
ZW50cyk7CiAKICAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQotICAgICAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmgKaW5kZXggODhlNzRhZTllZjIyODIyNTRh
MWFjNmJmNTNmYTRkNzU1NTQ0ZWU3NS4uNGE3YTVhZjdkNmViNTQxZWJhYjI0NjVmOWMwYjk1MjU2
YjU1NDdmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENEYXRhQ2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDRGF0YUNoYW5uZWwuaApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFJUQ0RhdGFDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBzdGQ6OnVuaXF1ZV9wdHI8
UlRDRGF0YUNoYW5uZWxIYW5kbGVyPik7CiAKLSAgICB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBzY2hlZHVsZURpc3BhdGNoRXZlbnQoUmVm
PEV2ZW50PiYmKTsKICAgICB2b2lkIHNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCgpOwogCiAgICAg
Ly8gRXZlbnRUYXJnZXQKQEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIEJpbmFyeVR5
cGUgbV9iaW5hcnlUeXBlOwogCiAgICAgVGltZXIgbV9zY2hlZHVsZWRFdmVudFRpbWVyOwotICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBtX3NjaGVkdWxlZEV2ZW50czsKKyAgICBWZWN0b3I8UmVm
PEV2ZW50Pj4gbV9zY2hlZHVsZWRFdmVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwCmluZGV4IGRkNDY0MWUxYjhkYTMyZGE3MTRmMzQ2ODEzMzk2N2M1ODFh
NDNlNjUuLmM2YWYxMmJkZjRlMzNjYzAzNGIzNzY4OTkzYzQwZTdjZmFlNWIxMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24uY3BwCkBAIC03MjUsOSArNzI1LDkgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6Y2hh
bmdlSWNlQ29ubmVjdGlvblN0YXRlKEljZUNvbm5lY3Rpb25TdGF0ZSBpY2VDb25uZWN0aW8KICAg
ICB9CiB9CiAKLXZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnNjaGVkdWxlRGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnNjaGVkdWxl
RGlzcGF0Y2hFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7Ci0gICAgbV9zY2hlZHVsZWRFdmVu
dHMuYXBwZW5kKGV2ZW50KTsKKyAgICBtX3NjaGVkdWxlZEV2ZW50cy5hcHBlbmQoV1RGOjptb3Zl
KGV2ZW50KSk7CiAKICAgICBpZiAoIW1fc2NoZWR1bGVkRXZlbnRUaW1lci5pc0FjdGl2ZSgpKQog
ICAgICAgICBtX3NjaGVkdWxlZEV2ZW50VGltZXIuc3RhcnRPbmVTaG90KDApOwpAQCAtNzM4LDEx
ICs3MzgsMTEgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVkRXZlbnRUaW1lckZp
cmVkKCkKICAgICBpZiAobV9zdG9wcGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50Pj4gZXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBldmVudHM7CiAg
ICAgZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCiAgICAgZm9yIChhdXRvJiBldmVu
dCA6IGV2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOworICAg
ICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIAogICAgIGV2ZW50cy5jbGVhcigpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi5oCmluZGV4IDUyZGM3OTMwYjA0MjYyMDEwMWFkZjZkMmY2NDNkZmNhNWU4NWUwZjAuLmU3
NTRjN2JmYzdlZDMxZjIwMTkwMGMzMDcwZDAwZTdkOTQ4ZTRlOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmgKQEAg
LTEyNyw3ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIFJUQ1BlZXJDb25uZWN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBQYXNzUmVmUHRyPFJUQ0NvbmZpZ3VyYXRpb24+LCBFeGNlcHRpb25D
b2RlJik7CiAKICAgICBzdGF0aWMgUmVmUHRyPFJUQ0NvbmZpZ3VyYXRpb24+IHBhcnNlQ29uZmln
dXJhdGlvbihjb25zdCBEaWN0aW9uYXJ5JiBjb25maWd1cmF0aW9uLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBzY2hlZHVsZURpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAg
IHZvaWQgc2NoZWR1bGVEaXNwYXRjaEV2ZW50KFJlZjxFdmVudD4mJik7CiAgICAgdm9pZCBzY2hl
ZHVsZWRFdmVudFRpbWVyRmlyZWQoKTsKICAgICBib29sIGhhc0xvY2FsU3RyZWFtV2l0aFRyYWNr
SWQoY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKIApAQCAtMTU5LDcgKzE1OSw3IEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcj4gbV9wZWVySGFu
ZGxlcjsKIAogICAgIFRpbWVyIG1fc2NoZWR1bGVkRXZlbnRUaW1lcjsKLSAgICBWZWN0b3I8UmVm
UHRyPEV2ZW50Pj4gbV9zY2hlZHVsZWRFdmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IG1f
c2NoZWR1bGVkRXZlbnRzOwogCiAgICAgUmVmUHRyPFJUQ0NvbmZpZ3VyYXRpb24+IG1fY29uZmln
dXJhdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVn
aW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCmluZGV4IGU0NTMyYzhhMTVmZDU2Mjlk
MmExODU4OGY5N2IxNTRhMjA4ZjBkYmMuLjZjODNlZGNlYTUwOGUzM2I2ZjY0NzYzYTc4OWVhNzUz
MmE0MTRkMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KQEAgLTI0Myw4ICsyNDMsOCBAQCB1
bnNpZ25lZCBsb25nIGxvbmcgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Om1vdmllU2l6ZSgp
IGNvbnN0CiB2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpwb3N0RXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgUmVmPEhUTUxQbHVnSW5FbGVtZW50PiBwcm90ZWN0
KCptX3BhcmVudEVsZW1lbnQpOwotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZSwgZmFsc2UsIHRydWUpOwotICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0
Y2hFdmVudChldmVudC5nZXQoKSk7CisgICAgUmVmPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lLCBmYWxzZSwgdHJ1ZSk7CisgICAgbV9wYXJlbnRFbGVtZW50LT5kaXNwYXRj
aEV2ZW50KGV2ZW50KTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJveGltaXR5Q29udHJv
bGxlci5jcHAKaW5kZXggNjA3OGYzN2ZiOGQzYjkxZTRlYTc2YjQwZjNiMjQwY2IwMmRlMTNmYi4u
NjhlYTI5NmFmODNhNTFjM2RlNjE4Yzk5NmVkNDExNjQ2YjE4Yzk3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJveGltaXR5Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJveGltaXR5
Q29udHJvbGxlci5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgYm9vbCBEZXZpY2VQcm94aW1pdHlDb250
cm9sbGVyOjpoYXNMYXN0RGF0YSgpCiAgICAgcmV0dXJuIGRldmljZVByb3hpbWl0eUNsaWVudCgp
LT5oYXNMYXN0RGF0YSgpOwogfQogCi1QYXNzUmVmUHRyPEV2ZW50PiBEZXZpY2VQcm94aW1pdHlD
b250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQorUmVmUHRyPEV2ZW50PiBEZXZpY2VQcm94aW1pdHlD
b250cm9sbGVyOjpnZXRMYXN0RXZlbnQoKQogewogICAgIHJldHVybiBEZXZpY2VQcm94aW1pdHlF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRkZXZpY2Vwcm94aW1pdHlFdmVudCwgZGV2
aWNlUHJveGltaXR5Q2xpZW50KCktPnZhbHVlKCksIGRldmljZVByb3hpbWl0eUNsaWVudCgpLT5t
aW4oKSwgZGV2aWNlUHJveGltaXR5Q2xpZW50KCktPm1heCgpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUNvbnRy
b2xsZXIuaAppbmRleCA0MGRkZmI3ZjIxMGNmYTA0MWQ1ZDZmZGRhNjBkMmYwYmEyNTVhYjA2Li44
OWNmMDU0OWE2NDNkMzk2YWEzMDQzZjVkM2ZhOTYyOWUxZDk0YzZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3Byb3hpbWl0eS9EZXZpY2VQcm94aW1pdHlDb250cm9sbGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wcm94aW1pdHkvRGV2aWNlUHJveGltaXR5Q29u
dHJvbGxlci5oCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICBEZXZpY2VQcm94aW1pdHlD
bGllbnQqIGRldmljZVByb3hpbWl0eUNsaWVudCgpOwogCiAgICAgdmlydHVhbCBib29sIGhhc0xh
c3REYXRhKCk7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBnZXRMYXN0RXZlbnQoKTsK
KyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCk7CiAKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKICAgICBzdGF0aWMgRGV2aWNlUHJveGltaXR5
Q29udHJvbGxlciogZnJvbShQYWdlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IDY0NjU4NDAwMjBlYTY1MzlkODBmNGI0M2MxN2E1
NDJkOGQzYjcyNzEuLjQxZWIxMDllN2JlYmQ4YmVmMWI5NmU4NjQ1MjYyNTU2MzkyNTFkYzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCkBA
IC02NDgsNyArNjQ4LDcgQEAgdm9pZCBXZWJTb2NrZXQ6OmRpc3BhdGNoT3JRdWV1ZUV2ZW50KFJl
ZjxFdmVudD4mJiBldmVudCkKICAgICBpZiAobV9zaG91bGREZWxheUV2ZW50RmlyaW5nKQogICAg
ICAgICBtX3BlbmRpbmdFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkpOwogICAgIGVsc2UK
LSAgICAgICAgZGlzcGF0Y2hFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKKyAgICAgICAgZGlzcGF0
Y2hFdmVudChldmVudCk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Rm9udExvYWRlci5jcHAKaW5kZXggZGRlMTMzY2M3YzcwMTQ0ZTJkMTAzNDRmYTc3MjMzYzkxZjA2
NWZkNC4uYzkwNzQ2MDVhM2U2MDk1ODBmOTkyYWE2MWY3ZDVlM2YwNThkYjU1ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250TG9hZGVyLmNwcApAQCAtMTY2LDkgKzE2Niw5IEBAIGJvb2wgRm9udExvYWRlcjo6
Y2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0CiAgICAgcmV0dXJuICFtX251bUxvYWRpbmdG
cm9tQ1NTICYmICFtX251bUxvYWRpbmdGcm9tSlM7CiB9CiAKLXZvaWQgRm9udExvYWRlcjo6c2No
ZWR1bGVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgRm9udExvYWRlcjo6c2No
ZWR1bGVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7Ci0gICAgbV9wZW5kaW5nRXZlbnRzLmFw
cGVuZChldmVudCk7CisgICAgbV9wZW5kaW5nRXZlbnRzLmFwcGVuZChXVEY6Om1vdmUoZXZlbnQp
KTsKICAgICBpZiAoIW1fcGVuZGluZ0V2ZW50c1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1f
cGVuZGluZ0V2ZW50c1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KQEAgLTE3OCwxNyArMTc4LDE3
IEBAIHZvaWQgRm9udExvYWRlcjo6ZmlyZVBlbmRpbmdFdmVudHMoKQogICAgIGlmIChtX3BlbmRp
bmdFdmVudHMuaXNFbXB0eSgpICYmICFtX2xvYWRpbmdEb25lRXZlbnQgJiYgIW1fY2FsbGJhY2tz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+
IHBlbmRpbmdFdmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IHBlbmRpbmdFdmVudHM7CiAg
ICAgbV9wZW5kaW5nRXZlbnRzLnN3YXAocGVuZGluZ0V2ZW50cyk7CiAKICAgICBib29sIGxvYWRp
bmdEb25lID0gZmFsc2U7CiAgICAgaWYgKG1fbG9hZGluZ0RvbmVFdmVudCkgewotICAgICAgICBw
ZW5kaW5nRXZlbnRzLmFwcGVuZChtX2xvYWRpbmdEb25lRXZlbnQucmVsZWFzZSgpKTsKKyAgICAg
ICAgcGVuZGluZ0V2ZW50cy5hcHBlbmQobV9sb2FkaW5nRG9uZUV2ZW50LnJlbGVhc2VOb25OdWxs
KCkpOwogICAgICAgICBsb2FkaW5nRG9uZSA9IHRydWU7CiAgICAgfQogCiAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IHBlbmRpbmdFdmVudHMuc2l6ZSgpOyArK2luZGV4KQotICAg
ICAgICBkaXNwYXRjaEV2ZW50KHBlbmRpbmdFdmVudHNbaW5kZXhdLnJlbGVhc2UoKSk7CisgICAg
ICAgIGRpc3BhdGNoRXZlbnQocGVuZGluZ0V2ZW50c1tpbmRleF0pOwogCiAgICAgaWYgKGxvYWRp
bmdEb25lICYmICFtX2NhbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgVmVjdG9yPFJlZlB0
cjxWb2lkQ2FsbGJhY2s+PiBjYWxsYmFja3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvRm9udExvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRMb2FkZXIuaAppbmRleCBk
ZmM1MDFhN2ViZWUwOTVmMjEyNTI5ODdmY2IzYzZlMGRhYzRjZmI2Li4zMzQ0NTk0ZTYxODkyMGMw
OTdlZTAxYmVkZmM2MTFhYmE5MTA2ZDZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Rm9udExvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250TG9hZGVyLmgKQEAgLTk5
LDcgKzk5LDcgQEAgcHJpdmF0ZToKICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERh
dGE7CiAgICAgdW5zaWduZWQgbV9udW1Mb2FkaW5nRnJvbUNTUzsKICAgICB1bnNpZ25lZCBtX251
bUxvYWRpbmdGcm9tSlM7Ci0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IG1fcGVuZGluZ0V2ZW50
czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9wZW5kaW5nRXZlbnRzOwogICAgIFZlY3RvcjxS
ZWZQdHI8Vm9pZENhbGxiYWNrPj4gbV9jYWxsYmFja3M7CiAgICAgUmVmUHRyPEV2ZW50PiBtX2xv
YWRpbmdEb25lRXZlbnQ7CiAgICAgVGltZXIgbV9wZW5kaW5nRXZlbnRzVGltZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGV2aWNlTW90aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMTE1MWJkMWVi
YTViZTRlOTY0OGU0ZjNhOWQwMjQ2MWRkYTM1ZGRiOC4uOTMwOTJiY2ZiN2ZkYjlmYTUxMjg3OWMz
ZjU0ODhhMDQ4NjA3YzEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1v
dGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25D
b250cm9sbGVyLmNwcApAQCAtNzIsNyArNzIsNyBAQCBib29sIERldmljZU1vdGlvbkNvbnRyb2xs
ZXI6Omhhc0xhc3REYXRhKCkKICAgICByZXR1cm4gZGV2aWNlTW90aW9uQ2xpZW50KCktPmxhc3RN
b3Rpb24oKTsKIH0KIAotUGFzc1JlZlB0cjxFdmVudD4gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6
Z2V0TGFzdEV2ZW50KCkKK1JlZlB0cjxFdmVudD4gRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6Z2V0
TGFzdEV2ZW50KCkKIHsKICAgICByZXR1cm4gRGV2aWNlTW90aW9uRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuZGV2aWNlbW90aW9uRXZlbnQsIGRldmljZU1vdGlvbkNsaWVudCgpLT5sYXN0TW90
aW9uKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU1vdGlvbkNv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VNb3Rpb25Db250cm9sbGVyLmgK
aW5kZXggN2Q3MmQ1MTVjYzZkODEzZGMxZjM4YzYxOWU4OWUyY2RjZmQ0YjlkYS4uMTRkYzc0NGI1
YjQ0YWRhMDViM2YzZGIzYWRmODk4MWRjZjllZGEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RldmljZU1vdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RGV2aWNlTW90aW9uQ29udHJvbGxlci5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBE
ZXZpY2VNb3Rpb25DbGllbnQqIGRldmljZU1vdGlvbkNsaWVudCgpOwogCiAgICAgdmlydHVhbCBi
b29sIGhhc0xhc3REYXRhKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50
PiBnZXRMYXN0RXZlbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4gZ2V0
TGFzdEV2ZW50KCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVu
dE5hbWUoKTsKICAgICBzdGF0aWMgRGV2aWNlTW90aW9uQ29udHJvbGxlciogZnJvbShQYWdlKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2aWNlT3JpZW50YXRpb25Db250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIu
Y3BwCmluZGV4IGFjZTNiMmIyMjk2M2U4MTI2MzliOTA4MmNhYjg0NmQxMDE3Y2Q1MzYuLjM5NmJm
OGNmNDA5NTg0ODcxZmUwNmVhOTczYzMwZDVkNmZkOGMyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC03OSw3ICs3OSw3
IEBAIGJvb2wgRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjpoYXNMYXN0RGF0YSgpCiAgICAg
cmV0dXJuIGRldmljZU9yaWVudGF0aW9uQ2xpZW50KCktPmxhc3RPcmllbnRhdGlvbigpOwogfQog
Ci1QYXNzUmVmUHRyPEV2ZW50PiBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXI6OmdldExhc3RF
dmVudCgpCitSZWZQdHI8RXZlbnQ+IERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6Z2V0TGFz
dEV2ZW50KCkKIHsKICAgICByZXR1cm4gRGV2aWNlT3JpZW50YXRpb25FdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5kZXZpY2VvcmllbnRhdGlvbkV2ZW50LCBkZXZpY2VPcmllbnRhdGlvbkNsaWVu
dCgpLT5sYXN0T3JpZW50YXRpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGV2
aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgKaW5kZXggMTE4MzA2MzQ4NjllOTA2ZTU4NzczNzRi
YjczYTJmZGU0ZThiOTI4Ny4uYjAxZjhkMWE2MmIwNDc5MmIzNWY4NDNhMmZmMDA4NTdhNTMxMTQz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RldmljZU9yaWVudGF0aW9uQ29udHJv
bGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xs
ZXIuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXN1bWVVcGRhdGVzKCk7
CiAjZWxzZQogICAgIHZpcnR1YWwgYm9vbCBoYXNMYXN0RGF0YSgpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBSZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAg
ICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCmluZGV4IDFlNDkzYjgzMDY1NzMxNzA1ODg5OTg1YWYyMmNmNDFiZTk2N2NmNGEuLmY1ZmJl
YjRkMDZlM2VmYTlmYTJiOWU4ODJiMzFiZGY3OGE3ZjNlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcApAQCAtNDA1MCw3ICs0MDUwLDcgQEAgRXZlbnRMaXN0ZW5lciogRG9jdW1lbnQ6OmdldFdp
bmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmUKICAgICBy
ZXR1cm4gbV9kb21XaW5kb3ctPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsK
IH0KIAotdm9pZCBEb2N1bWVudDo6ZGlzcGF0Y2hXaW5kb3dFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCwgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRG9jdW1lbnQ6
OmRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdldCogdGFyZ2V0KQog
ewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hB
c3NlcnRpb246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKICAgICBpZiAoIW1fZG9tV2lu
ZG93KQpAQCAtNDA2OCwyMSArNDA2OCwyMSBAQCB2b2lkIERvY3VtZW50OjpkaXNwYXRjaFdpbmRv
d0xvYWRFdmVudCgpCiAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnREaWRGaW5p
c2hMb2FkRXZlbnQoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVdpbmRvd0V2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVdpbmRvd0V2ZW50
KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAgICBldmVudC0+c2V0VGFyZ2V0KG1fZG9tV2luZG93
LmdldCgpKTsKLSAgICBtX2V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KGV2ZW50KTsKKyAgICBtX2V2
ZW50UXVldWUuZW5xdWV1ZUV2ZW50KFdURjo6bW92ZShldmVudCkpOwogfQogCi12b2lkIERvY3Vt
ZW50OjplbnF1ZXVlRG9jdW1lbnRFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQg
RG9jdW1lbnQ6OmVucXVldWVEb2N1bWVudEV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAg
ICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQo
ZXZlbnQpOworICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQordm9pZCBEb2N1bWVudDo6ZW5xdWV1ZU92ZXJmbG93RXZlbnQoUmVmPEV2ZW50
PiYmIGV2ZW50KQogewotICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoZXZlbnQpOworICAg
IG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKGV2ZW50KSk7CiB9CiAKIFJlZlB0
cjxFdmVudD4gRG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBF
eGNlcHRpb25Db2RlJiBlYykKQEAgLTU5ODAsMjQgKzU5ODAsMjQgQEAgdm9pZCBEb2N1bWVudDo6
c2VuZFdpbGxSZXZlYWxFZGdlRXZlbnRzSWZOZWVkZWQoY29uc3QgSW50UG9pbnQmIG9sZFBvc2l0
aW9uLCBjb24KICAgICAvLyBCb3R0b20gZWRnZS4KICAgICBpZiAobmV3UG9zaXRpb24ueSgpID49
IHdpbGxSZXZlYWxCb3R0b21Ob3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi55KCkgPiBv
bGRQb3NpdGlvbi55KCkKICAgICAgICAgJiYgd2lsbFJldmVhbEJvdHRvbU5vdGlmaWNhdGlvblBv
aW50ID49IG9sZFBvc2l0aW9uLnkoKSkgewotICAgICAgICBSZWZQdHI8RXZlbnQ+IHdpbGxSZXZl
YWxFdmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWxib3R0
b21FdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgUmVmPEV2ZW50PiB3aWxsUmV2ZWFsRXZl
bnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsYm90dG9tRXZl
bnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5x
dWV1ZVdpbmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAg
ZW5xdWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwot
ICAgICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3Zl
KHdpbGxSZXZlYWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gVG9wIGVkZ2Uu
CiAgICAgaWYgKG5ld1Bvc2l0aW9uLnkoKSA8PSB3aWxsUmV2ZWFsVG9wTm90aWZpY2F0aW9uUG9p
bnQgJiYgbmV3UG9zaXRpb24ueSgpIDwgb2xkUG9zaXRpb24ueSgpCiAgICAgICAgICYmIHdpbGxS
ZXZlYWxUb3BOb3RpZmljYXRpb25Qb2ludCA8PSBvbGRQb3NpdGlvbi55KCkpIHsKLSAgICAgICAg
UmVmUHRyPEV2ZW50PiB3aWxsUmV2ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS53ZWJraXR3aWxscmV2ZWFsdG9wRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIFJlZjxF
dmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0
d2lsbHJldmVhbHRvcEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICBpZiAoIXRhcmdldCkK
LSAgICAgICAgICAgIGVucXVldWVXaW5kb3dFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgp
KTsKKyAgICAgICAgICAgIGVucXVldWVXaW5kb3dFdmVudChXVEY6Om1vdmUod2lsbFJldmVhbEV2
ZW50KSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgd2lsbFJldmVhbEV2ZW50LT5zZXRU
YXJnZXQodGFyZ2V0KTsKLSAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQod2ls
bFJldmVhbEV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBtX2V2ZW50UXVldWUuZW5xdWV1
ZUV2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNjAwNywyNCArNjAwNywyNCBAQCB2b2lkIERvY3VtZW50OjpzZW5kV2lsbFJldmVhbEVkZ2VF
dmVudHNJZk5lZWRlZChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbgogICAgIC8vIFJp
Z2h0IGVkZ2UuCiAgICAgaWYgKG5ld1Bvc2l0aW9uLngoKSA+PSB3aWxsUmV2ZWFsUmlnaHROb3Rp
ZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkgPiBvbGRQb3NpdGlvbi54KCkKICAgICAg
ICAgJiYgd2lsbFJldmVhbFJpZ2h0Tm90aWZpY2F0aW9uUG9pbnQgPj0gb2xkUG9zaXRpb24ueCgp
KSB7Ci0gICAgICAgIFJlZlB0cjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZhbHNlLCBmYWxzZSk7
CisgICAgICAgIFJlZjxFdmVudD4gd2lsbFJldmVhbEV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2Via2l0d2lsbHJldmVhbHJpZ2h0RXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAg
ICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KHdpbGxSZXZl
YWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5xdWV1ZVdpbmRvd0V2ZW50KFdURjo6
bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB3aWxs
UmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgICAgICAgICAgbV9ldmVudFF1ZXVl
LmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIG1f
ZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdpbGxSZXZlYWxFdmVudCkpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgLy8gTGVmdCBlZGdlLgogICAgIGlmIChuZXdQb3NpdGlvbi54
KCkgPD0gd2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Qb2ludCAmJiBuZXdQb3NpdGlvbi54KCkg
PCBvbGRQb3NpdGlvbi54KCkKICAgICAgICAgJiYgd2lsbFJldmVhbExlZnROb3RpZmljYXRpb25Q
b2ludCA8PSBvbGRQb3NpdGlvbi54KCkpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiB3aWxsUmV2
ZWFsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXR3aWxscmV2ZWFsbGVm
dEV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBSZWY8RXZlbnQ+IHdpbGxSZXZlYWxFdmVu
dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHdpbGxyZXZlYWxsZWZ0RXZlbnQs
IGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgZW5xdWV1
ZVdpbmRvd0V2ZW50KHdpbGxSZXZlYWxFdmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgZW5x
dWV1ZVdpbmRvd0V2ZW50KFdURjo6bW92ZSh3aWxsUmV2ZWFsRXZlbnQpKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICB3aWxsUmV2ZWFsRXZlbnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAg
ICAgICAgICAgbV9ldmVudFF1ZXVlLmVucXVldWVFdmVudCh3aWxsUmV2ZWFsRXZlbnQucmVsZWFz
ZSgpKTsKKyAgICAgICAgICAgIG1fZXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoV1RGOjptb3ZlKHdp
bGxSZXZlYWxFdmVudCkpOwogICAgICAgICB9CiAgICAgfQogI2Vsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKaW5kZXggMDNkMGI0NWNkNzE0OTUxZTdkNWFmMDQ0YzllZmI5YWFjNjFjNTE2OS4uYjVmZjNk
NGVjMzcxYzIxZjYwZTc2NGIyZDgxNTM5ZjBlMjdmNDA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
QEAgLTc4OCw3ICs3ODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaW5kb3dBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2
b2lkIHNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwogICAgIEV2ZW50TGlzdGVuZXIq
IGdldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hXaW5kb3dFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gPSBudWxscHRyKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoV2luZG93RXZlbnQoRXZlbnQmLCBFdmVudFRhcmdl
dCogPSBudWxscHRyKTsKICAgICB2b2lkIGRpc3BhdGNoV2luZG93TG9hZEV2ZW50KCk7CiAKICAg
ICBSZWZQdHI8RXZlbnQ+IGNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNl
cHRpb25Db2RlJik7CkBAIC0xMDkyLDkgKzEwOTIsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1
cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgZW5xdWV1ZVdpbmRvd0V2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+KTsKLSAgICB2b2lkIGVucXVldWVEb2N1bWVudEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsK
LSAgICB2b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICB2
b2lkIGVucXVldWVXaW5kb3dFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZvaWQgZW5xdWV1ZURv
Y3VtZW50RXZlbnQoUmVmPEV2ZW50PiYmKTsKKyAgICB2b2lkIGVucXVldWVPdmVyZmxvd0V2ZW50
KFJlZjxFdmVudD4mJik7CiAgICAgdm9pZCBlbnF1ZXVlUGFnZXNob3dFdmVudChQYWdlc2hvd0V2
ZW50UGVyc2lzdGVuY2UpOwogICAgIHZvaWQgZW5xdWV1ZUhhc2hjaGFuZ2VFdmVudChjb25zdCBT
dHJpbmcmIG9sZFVSTCwgY29uc3QgU3RyaW5nJiBuZXdVUkwpOwogICAgIHZvaWQgZW5xdWV1ZVBv
cHN0YXRlRXZlbnQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5jcHAKaW5kZXggYTdiYjVk
ZmUyY2FmODQ4ZDRmNWY5MmUyODFjOTczMmU0OGEyZTlmOS4uOGVhNWVjMDM3NGJkMTM3ODg3MWQy
YTYyZDk0YTliOTc4MjBiYzZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50RXZlbnRRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RXZlbnRR
dWV1ZS5jcHAKQEAgLTY4LDE1ICs2OCwxNSBAQCBEb2N1bWVudEV2ZW50UXVldWU6On5Eb2N1bWVu
dEV2ZW50UXVldWUoKQogewogfQogCi1ib29sIERvY3VtZW50RXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorYm9vbCBEb2N1bWVudEV2ZW50UXVldWU6OmVu
cXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKGV2ZW50LT50YXJn
ZXQoKSk7Ci0gICAgQVNTRVJUKCFtX3F1ZXVlZEV2ZW50cy5jb250YWlucyhldmVudC5nZXQoKSkp
OworICAgIEFTU0VSVCghbV9xdWV1ZWRFdmVudHMuY29udGFpbnMoZXZlbnQucHRyKCkpKTsKIAog
ICAgIGlmIChtX2lzQ2xvc2VkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3F1ZXVl
ZEV2ZW50cy5hZGQoZXZlbnQpOworICAgIG1fcXVldWVkRXZlbnRzLmFkZChldmVudC5wdHIoKSk7
CiAgICAgaWYgKCFtX3BlbmRpbmdFdmVudFRpbWVyLT5pc0FjdGl2ZSgpKQogICAgICAgICBtX3Bl
bmRpbmdFdmVudFRpbWVyLT5zdGFydE9uZVNob3QoMCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05
OSw5ICs5OSw5IEBAIHZvaWQgRG9jdW1lbnRFdmVudFF1ZXVlOjplbnF1ZXVlT3JEaXNwYXRjaFNj
cm9sbEV2ZW50KE5vZGUmIHRhcmdldCkKICAgICBib29sIGJ1YmJsZXMgPSB0YXJnZXQuaXNEb2N1
bWVudE5vZGUoKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBmYWxzZTsKIAotICAgIFJlZlB0cjxF
dmVudD4gc2Nyb2xsRXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVu
dCwgYnViYmxlcywgY2FuY2VsYWJsZSk7CisgICAgUmVmPEV2ZW50PiBzY3JvbGxFdmVudCA9IEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBidWJibGVzLCBjYW5jZWxhYmxl
KTsKICAgICBzY3JvbGxFdmVudC0+c2V0VGFyZ2V0KCZ0YXJnZXQpOwotICAgIGVucXVldWVFdmVu
dChzY3JvbGxFdmVudC5yZWxlYXNlKCkpOworICAgIGVucXVldWVFdmVudChXVEY6Om1vdmUoc2Ny
b2xsRXZlbnQpKTsKIH0KIAogYm9vbCBEb2N1bWVudEV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2
ZW50JiBldmVudCkKQEAgLTE0Niw5ICsxNDYsOSBAQCB2b2lkIERvY3VtZW50RXZlbnRRdWV1ZTo6
ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiAgICAgLy8gV2h5IGRvIHdlIGhhdmUgdGhpcyBz
cGVjaWFsIGNhc2UgaGVyZSBpbnN0ZWFkIG9mIGEgdmlydHVhbCBmdW5jdGlvbiBvbiBFdmVudFRh
cmdldD8KICAgICBFdmVudFRhcmdldCYgZXZlbnRUYXJnZXQgPSAqZXZlbnQudGFyZ2V0KCk7CiAg
ICAgaWYgKERPTVdpbmRvdyogd2luZG93ID0gZXZlbnRUYXJnZXQudG9ET01XaW5kb3coKSkKLSAg
ICAgICAgd2luZG93LT5kaXNwYXRjaEV2ZW50KCZldmVudCwgMCk7CisgICAgICAgIHdpbmRvdy0+
ZGlzcGF0Y2hFdmVudChldmVudCwgbnVsbHB0cik7CiAgICAgZWxzZQotICAgICAgICBldmVudFRh
cmdldC5kaXNwYXRjaEV2ZW50KCZldmVudCk7CisgICAgICAgIGV2ZW50VGFyZ2V0LmRpc3BhdGNo
RXZlbnQoZXZlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRFdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVl
LmgKaW5kZXggOTgyNWVkMmY2MDdhNDJhODdiNTExMzNhOWI4MTVlNTVlZjIzMGVkYy4uN2QxMTFk
MmQ0YjViYTY5YzhiM2U3YzIyZjg3NDRjZTc5Njc1M2I5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50RXZlbnRRdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudEV2ZW50UXVldWUuaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgRG9jdW1lbnRFdmVudFF1ZXVlKERvY3VtZW50Jik7CiAgICAgdmlydHVhbCB+RG9jdW1lbnRF
dmVudFF1ZXVlKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5xdWV1ZUV2ZW50KFJlZjxFdmVu
dD4mJikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50Jikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAppbmRleCA5OGE2MTBmZWQxYzZhOTU0ZmExNDI3NGVmOWNhZTJjZjhhNzM5ODNjLi4z
ZDczZGVhNjhmZjRkMzU4Y2MxMDhiZGJmY2JhNTM3NTM4NzUzM2ExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZl
bnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogICAgIGlm
IChpc0ZvcmNlRXZlbnQocGxhdGZvcm1FdmVudCkgJiYgIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJU
eXBlRm9yRXZlbnRUeXBlKHBsYXRmb3JtRXZlbnQudHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50Ojpj
cmVhdGUoZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCksIHBsYXRmb3JtRXZlbnQs
IGRldGFpbCwgcmVsYXRlZFRhcmdldCk7CisgICAgUmVmPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQg
PSBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCks
IHBsYXRmb3JtRXZlbnQsIGRldGFpbCwgcmVsYXRlZFRhcmdldCk7CiAKICAgICBpZiAobW91c2VF
dmVudC0+dHlwZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFNob3VsZG4n
dCBoYXBwZW4uCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNl
RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogICAg
ICAgICAvLyBTcGVjaWFsIGNhc2U6IElmIGl0J3MgYSBkb3VibGUgY2xpY2sgZXZlbnQsIHdlIGFs
c28gc2VuZCB0aGUgZGJsY2xpY2sgZXZlbnQuIFRoaXMgaXMgbm90IHBhcnQKICAgICAgICAgLy8g
b2YgdGhlIERPTSBzcGVjcywgYnV0IGlzIHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUg
b25kYmxjbGljaz0iIiBhdHRyaWJ1dGUuIFRoaXMgaXMgdHJlYXRlZAogICAgICAgICAvLyBhcyBh
IHNlcGFyYXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMgbGlrZSBGaXJl
Zm94LCBhbmQgc28gd2UgZG8gdGhlIHNhbWUuCi0gICAgICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBk
b3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7CisgICAgICAgIFJlZjxNb3Vz
ZUV2ZW50PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKCk7CiAgICAgICAg
IGRvdWJsZUNsaWNrRXZlbnQtPmluaXRNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2
ZW50LAogICAgICAgICAgICAgbW91c2VFdmVudC0+YnViYmxlcygpLCBtb3VzZUV2ZW50LT5jYW5j
ZWxhYmxlKCksIG1vdXNlRXZlbnQtPnZpZXcoKSwgbW91c2VFdmVudC0+ZGV0YWlsKCksCiAgICAg
ICAgICAgICBtb3VzZUV2ZW50LT5zY3JlZW5YKCksIG1vdXNlRXZlbnQtPnNjcmVlblkoKSwgbW91
c2VFdmVudC0+Y2xpZW50WCgpLCBtb3VzZUV2ZW50LT5jbGllbnRZKCksCkBAIC0yODUsNyArMjg1
LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBwbGF0Zm9ybUV2ZW50LCBjb25zdAogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogewotICAgIFJlZlB0cjxX
aGVlbEV2ZW50PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVudDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVu
dCgpLmRlZmF1bHRWaWV3KCkpOworICAgIFJlZjxXaGVlbEV2ZW50PiB3aGVlbEV2ZW50ID0gV2hl
ZWxFdmVudDo6Y3JlYXRlKGV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOwogCiAgICAg
Ly8gRXZlbnRzIHdpdGggbm8gZGVsdGFzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSB0aGV5IGNvbnZl
eSBwbGF0Zm9ybSBpbmZvcm1hdGlvbiBhYm91dCBzY3JvbGwgZ2VzdHVyZXMKICAgICAvLyBhbmQg
bW9tZW50dW0gYmVnaW5uaW5nIG9yIGVuZGluZy4gSG93ZXZlciwgdGhvc2UgZXZlbnRzIHNob3Vs
ZCBub3QgYmUgc2VudCB0byB0aGUgRE9NIHNpbmNlIHNvbWUKQEAgLTMwMCw5ICszMDAsOSBAQCBi
b29sIEVsZW1lbnQ6OmRpc3BhdGNoV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IGV2ZW50KQogCiBib29sIEVsZW1lbnQ6OmRpc3BhdGNoS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50JiBwbGF0Zm9ybUV2ZW50KQogewotICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50
PiBldmVudCA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgp
LmRlZmF1bHRWaWV3KCkpOworICAgIFJlZjxLZXlib2FyZEV2ZW50PiBldmVudCA9IEtleWJvYXJk
RXZlbnQ6OmNyZWF0ZShwbGF0Zm9ybUV2ZW50LCBkb2N1bWVudCgpLmRlZmF1bHRWaWV3KCkpOwog
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpIHsKLSAgICAgICAgaWYg
KGZyYW1lLT5ldmVudEhhbmRsZXIoKS5hY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0
aW9uKGV2ZW50LmdldCgpKSkKKyAgICAgICAgaWYgKGZyYW1lLT5ldmVudEhhbmRsZXIoKS5hY2Nl
c3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKGV2ZW50KSkKICAgICAgICAgICAgIGV2
ZW50LT5zdG9wUHJvcGFnYXRpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVudCkgJiYgIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgp
OwpAQCAtMjMyNCw3ICsyMzI0LDcgQEAgYm9vbCBFbGVtZW50OjpkaXNwYXRjaE1vdXNlRm9yY2VX
aWxsQmVnaW4oKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybU1vdXNlRXZl
bnQgcGxhdGZvcm1Nb3VzZUV2ZW50KGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uKCksIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZUdsb2JhbFBv
c2l0aW9uKCksIE5vQnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpOb1R5cGUsIDEsIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBXVEY6OmN1cnJlbnRUaW1lKCksIEZvcmNlQXRDbGljayk7Ci0gICAg
UmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCA9ICBNb3VzZUV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdG1vdXNlZm9yY2V3aWxsYmVnaW5FdmVudCwgZG9j
dW1lbnQoKS5kZWZhdWx0VmlldygpLCBwbGF0Zm9ybU1vdXNlRXZlbnQsIDAsIG51bGxwdHIpOwor
ICAgIFJlZjxNb3VzZUV2ZW50PiBtb3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQgPSAgTW91c2VFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRtb3VzZWZvcmNld2lsbGJlZ2luRXZlbnQsIGRv
Y3VtZW50KCkuZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm1Nb3VzZUV2ZW50LCAwLCBudWxscHRyKTsK
ICAgICBtb3VzZUZvcmNlV2lsbEJlZ2luRXZlbnQtPnNldFRhcmdldCh0aGlzKTsKICAgICBkaXNw
YXRjaEV2ZW50KG1vdXNlRm9yY2VXaWxsQmVnaW5FdmVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCmlu
ZGV4IDU5NmRkODU4YTA0YzM2M2E3NWU0OGVhY2Y4YTc0YTVhOGQ2ZWU4NTUuLjVjMWU2ZmU3MDEy
NzhjZGU1YWU2ZTAzZWQ4NWE1ZTI3NGQ3OWEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcApAQCAtMTYy
LDEyICsxNjIsMTIgQEAgUGFzc1JlZlB0cjxFdmVudD4gRXZlbnQ6OmNsb25lRm9yKEhUTUxJRnJh
bWVFbGVtZW50KikgY29uc3QKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZSh0eXBlKCksIGJ1YmJs
ZXMoKSwgY2FuY2VsYWJsZSgpKTsKIH0KIAotdm9pZCBFdmVudDo6c2V0VGFyZ2V0KFBhc3NSZWZQ
dHI8RXZlbnRUYXJnZXQ+IHRhcmdldCkKK3ZvaWQgRXZlbnQ6OnNldFRhcmdldChSZWZQdHI8RXZl
bnRUYXJnZXQ+JiYgdGFyZ2V0KQogewogICAgIGlmIChtX3RhcmdldCA9PSB0YXJnZXQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OworICAgIG1fdGFyZ2V0ID0gV1RG
Ojptb3ZlKHRhcmdldCk7CiAgICAgaWYgKG1fdGFyZ2V0KQogICAgICAgICByZWNlaXZlZFRhcmdl
dCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnQuaAppbmRleCAwOWU3NzhkNTEzNmZmMGZjYTg2ZTRkYzI5ZmViYWFl
ODljMjE3ZjBjLi4wY2NjZTEwODg1Mzg4NTJlMzFkNGYzNDIxNmNlY2QxOGU4OTQyMzNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnQuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFR5cGUo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KICAgICAKICAgICBF
dmVudFRhcmdldCogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KLSAg
ICB2b2lkIHNldFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Pik7CisgICAgdm9pZCBzZXRU
YXJnZXQoUmVmUHRyPEV2ZW50VGFyZ2V0PiYmKTsKIAogICAgIEV2ZW50VGFyZ2V0KiBjdXJyZW50
VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0OyB9CiAgICAgdm9pZCBzZXRD
dXJyZW50VGFyZ2V0KEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0KSB7IG1fY3VycmVudFRhcmdl
dCA9IGN1cnJlbnRUYXJnZXQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAK
aW5kZXggMmJkYzM1MGI1YTVmNzYzMzBiMmQ3ZGI3NjgyYjc2Zjg4NjUzYWEyZC4uMzQxODQ3ZmQz
ODAyODhmMzAwZTBkODNiNmIwNDNkYWJlNTIxNzQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
RGlzcGF0Y2hlci5jcHAKQEAgLTcwLDkgKzcwLDkgQEAgYm9vbCBXaW5kb3dFdmVudENvbnRleHQ6
OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCkKICAgICBpZiAoIW1fd2luZG93KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBldmVudC5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkp
OworICAgIGV2ZW50LnNldFRhcmdldChtX3RhcmdldC5jb3B5UmVmKCkpOwogICAgIGV2ZW50LnNl
dEN1cnJlbnRUYXJnZXQobV93aW5kb3cuZ2V0KCkpOwotICAgIG1fd2luZG93LT5maXJlRXZlbnRM
aXN0ZW5lcnMoJmV2ZW50KTsKKyAgICBtX3dpbmRvdy0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjAxLDEwICsyMDEsMTAgQEAgaW5saW5lIEV2
ZW50VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhOb2RlJiByZWZlcmVu
Y2VOb2RlKQogICAgIHJldHVybiAmcmVmZXJlbmNlTm9kZTsKIH0KIAotdm9pZCBFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQoTm9kZSYgbm9kZSwgUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiBu
b2RlLCBFdmVudCYgZXZlbnQpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHRhcmdldCBo
ZXJlIGJlY2F1c2UgaXQgY2FuIGdvIGF3YXkgYnkgdGhlIHRpbWUgd2UgYWN0dWFsbHkgZmlyZSB0
aGUgZXZlbnQuCi0gICAgZXZlbnQtPnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdUYXJn
ZXRSdWxlcyhub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGlu
Z1RhcmdldFJ1bGVzKG5vZGUpKTsKICAgICBTY29wZWRFdmVudFF1ZXVlOjpzaW5nbGV0b24oKS5l
bnF1ZXVlRXZlbnQoZXZlbnQpOwogfQogCkBAIC0zMDAsMjMgKzMwMCwxOSBAQCBzdGF0aWMgdm9p
ZCBkaXNwYXRjaEV2ZW50SW5ET00oRXZlbnQmIGV2ZW50LCBjb25zdCBFdmVudFBhdGgmIHBhdGgs
IFdpbmRvd0V2ZW50QwogICAgIH0KIH0KIAotYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
RXZlbnQoTm9kZSogb3JpZ2luLCBQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jvb2wgRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG9yaWdpbiwgRXZlbnQmIGV2ZW50KQog
ewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFOb0V2ZW50RGlzcGF0Y2hB
c3NlcnRpb246OmlzRXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKLSAgICBpZiAoIXBycEV2ZW50
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQogICAgIEFTU0VSVChvcmlnaW4pOwogICAgIFJlZlB0
cjxOb2RlPiBub2RlKG9yaWdpbik7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudChwcnBFdmVudCk7
CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IG5vZGUtPmRvY3VtZW50KCkudmlldygpOwot
ICAgIEV2ZW50UGF0aCBldmVudFBhdGgoKm5vZGUsICpldmVudCk7CisgICAgRXZlbnRQYXRoIGV2
ZW50UGF0aCgqbm9kZSwgZXZlbnQpOwogCi0gICAgaWYgKEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFy
Z2V0ID0gZXZlbnQtPnJlbGF0ZWRUYXJnZXQoKSkKKyAgICBpZiAoRXZlbnRUYXJnZXQqIHJlbGF0
ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0KCkpCiAgICAgICAgIGV2ZW50UGF0aC5zZXRS
ZWxhdGVkVGFyZ2V0KCpub2RlLCAqcmVsYXRlZFRhcmdldCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykgJiYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoaXM8VG91Y2hFdmVudD4oKmV2ZW50KSkg
ewotICAgICAgICBpZiAoIWV2ZW50UGF0aC51cGRhdGVUb3VjaExpc3RzKGRvd25jYXN0PFRvdWNo
RXZlbnQ+KCpldmVudCkpKQorICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkpIHsKKyAgICAg
ICAgaWYgKCFldmVudFBhdGgudXBkYXRlVG91Y2hMaXN0cyhkb3duY2FzdDxUb3VjaEV2ZW50Pihl
dmVudCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCkBAIC0zMjQs
OCArMzIwLDggQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogb3Jp
Z2luLCBQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBDaGlsZE5vZGVzTGF6eVNuYXBz
aG90Ojp0YWtlQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCgpOwogCiAgICAgRXZlbnRUYXJnZXQqIHRh
cmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKTsKLSAgICBldmVu
dC0+c2V0VGFyZ2V0KHRhcmdldCk7Ci0gICAgaWYgKCFldmVudC0+dGFyZ2V0KCkpCisgICAgZXZl
bnQuc2V0VGFyZ2V0KHRhcmdldCk7CisgICAgaWYgKCFldmVudC50YXJnZXQoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighTm9F
dmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CkBAIC0z
MzQsMzAgKzMzMCwzMCBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2Rl
KiBvcmlnaW4sIFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50KQogCiAgICAgSW5wdXRFbGVtZW50
Q2xpY2tTdGF0ZSBjbGlja0hhbmRsaW5nU3RhdGU7CiAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KCpub2RlKSkKLSAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndp
bGxEaXNwYXRjaEV2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAgICAgICAgZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLndpbGxEaXNwYXRjaEV2ZW50KGV2ZW50LCBj
bGlja0hhbmRsaW5nU3RhdGUpOwogCi0gICAgaWYgKCFldmVudC0+cHJvcGFnYXRpb25TdG9wcGVk
KCkgJiYgIWV2ZW50UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTSgq
ZXZlbnQsIGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsKKyAgICBpZiAoIWV2ZW50LnBy
b3BhZ2F0aW9uU3RvcHBlZCgpICYmICFldmVudFBhdGguaXNFbXB0eSgpKQorICAgICAgICBkaXNw
YXRjaEV2ZW50SW5ET00oZXZlbnQsIGV2ZW50UGF0aCwgd2luZG93RXZlbnRDb250ZXh0KTsKIAot
ICAgIGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5v
ZGUpKTsKLSAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldChudWxscHRyKTsKLSAgICBldmVudC0+
c2V0RXZlbnRQaGFzZSgwKTsKKyAgICBldmVudC5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0
aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsKKyAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KG51bGxw
dHIpOworICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoMCk7CiAKICAgICBpZiAoY2xpY2tIYW5kbGlu
Z1N0YXRlLnN0YXRlZnVsKQotICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9k
ZSkuZGlkRGlzcGF0Y2hDbGlja0V2ZW50KCpldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKKyAg
ICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLmRpZERpc3BhdGNoQ2xpY2tF
dmVudChldmVudCwgY2xpY2tIYW5kbGluZ1N0YXRlKTsKIAogICAgIC8vIENhbGwgZGVmYXVsdCBl
dmVudCBoYW5kbGVycy4gV2hpbGUgdGhlIERPTSBkb2VzIGhhdmUgYSBjb25jZXB0IG9mIHByZXZl
bnRpbmcKICAgICAvLyBkZWZhdWx0IGhhbmRsaW5nLCB0aGUgZGV0YWlsIG9mIHdoaWNoIGhhbmRs
ZXJzIGFyZSBjYWxsZWQgaXMgYW4gaW50ZXJuYWwKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRh
aWwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgaWYgKCFldmVudC0+ZGVmYXVsdFByZXZl
bnRlZCgpICYmICFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgY2FsbERlZmF1bHRF
dmVudEhhbmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKCpldmVudCwgZXZlbnRQYXRoKTsKKyAgICBp
ZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZlbnQuZGVmYXVsdEhhbmRsZWQoKSkK
KyAgICAgICAgY2FsbERlZmF1bHRFdmVudEhhbmRsZXJzSW5UaGVCdWJibGluZ09yZGVyKGV2ZW50
LCBldmVudFBhdGgpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgYWZ0ZXIgZXZlbnQgZGlzcGF0Y2gs
IHRoZSBldmVudCdzIHRhcmdldCBvYmplY3QgaXMgdGhlCiAgICAgLy8gb3V0ZXJtb3N0IHNoYWRv
dyBET00gYm91bmRhcnkuCi0gICAgZXZlbnQtPnNldFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQu
dGFyZ2V0KCkpOwotICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG51bGxwdHIpOworICAgIGV2
ZW50LnNldFRhcmdldCh3aW5kb3dFdmVudENvbnRleHQudGFyZ2V0KCkpOworICAgIGV2ZW50LnNl
dEN1cnJlbnRUYXJnZXQobnVsbHB0cik7CiAKLSAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJl
dmVudGVkKCk7CisgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkKCk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRFdmVudENyb3NzU2hhZG93Qm91bmRhcnkoRXZlbnQmIGV2
ZW50LCBTaGFkb3dSb290JiBzaGFkb3dSb290LCBFdmVudFRhcmdldCYgdGFyZ2V0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDY0MDQwZGQzY2M0YmU4N2JlYjYxOGMyMDlj
ZjQ5ZjIyYzQwNjU0ZDIuLmYxODlkN2E0ZGYyYjg1ZDI3YWY3NDVjZmFlM2FhZTQ2ODBkYTkzNTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTM4LDExICszOCwxMSBAQCBj
bGFzcyBOb2RlOwogCiBuYW1lc3BhY2UgRXZlbnREaXNwYXRjaGVyIHsKIAotYm9vbCBkaXNwYXRj
aEV2ZW50KE5vZGUqLCBQYXNzUmVmUHRyPEV2ZW50Pik7Ci12b2lkIGRpc3BhdGNoU2NvcGVkRXZl
bnQoTm9kZSYsIFBhc3NSZWZQdHI8RXZlbnQ+KTsKK2Jvb2wgZGlzcGF0Y2hFdmVudChOb2RlKiwg
RXZlbnQmKTsKK3ZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiwgRXZlbnQmKTsKIHZvaWQg
ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhFbGVtZW50KiwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCwg
U2ltdWxhdGVkQ2xpY2tNb3VzZUV2ZW50T3B0aW9ucywgU2ltdWxhdGVkQ2xpY2tWaXN1YWxPcHRp
b25zKTsKIAotfTsKK30KIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaAppbmRleCBlOTkzNGM1
MDhjMmYxNjQ5ZDU0YjgwYjY1OGZmNmRjYmI0MTdlMWY3Li5hYzM5ZWM2MTdhZjhlZDQ2MmE1MWNk
ZWU3YTE1ZDFmNDg4Mjg0YjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRR
dWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmgKQEAgLTM2LDcgKzM2
LDcgQEAgY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudFF1ZXVlIHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5FdmVudFF1ZXVlKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIGVucXVldWVFdmVudChQYXNz
UmVmUHRyPEV2ZW50PikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUmVmPEV2
ZW50PiYmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbmNlbEV2ZW50KEV2ZW50JikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsgLy8gRGlzY2FyZCBhY2N1bXVsYXRlZCBldmVu
dHMgYW5kIGFsbCBmdXR1cmUgZXZlbnRzLiBObyBldmVudHMgd2lsbCBiZSBkaXNwYXRjaGVkIGFm
dGVyIHRoaXMuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXggNzYyYTZhNTI4
ZjM1MTM0MzNjZGJkY2Y5NDBhNmU2Mjk3OTczNjI1Yi4uZmZkZGVhOTQ3NWU2OTlhZWVkZGEyNGJi
ZmExYThkNDFlOTQ2M2IwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCkBAIC0xMzQs
NyArMTM0LDcgQEAgYm9vbCBFdmVudFRhcmdldDo6Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogICAgIHJldHVybiByZW1vdmVFdmVudExp
c3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTsKIH0KIAotYm9vbCBFdmVudFRhcmdl
dDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCitib29sIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KEV2ZW50KiBldmVudCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFldmVudCkgewogICAgICAgICBlYyA9IFR5cGVFcnJv
cjsKQEAgLTE0OSwxNiArMTQ5LDE5IEBAIGJvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGlmICghc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQoKmV2ZW50
KTsKIH0KIAotYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKK2Jvb2wgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQog
ewotICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEN1cnJlbnRUYXJn
ZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7Ci0g
ICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LmdldCgp
KTsKLSAgICBldmVudC0+c2V0RXZlbnRQaGFzZSgwKTsKKyAgICBBU1NFUlQoZXZlbnQuaXNJbml0
aWFsaXplZCgpKTsKKyAgICBBU1NFUlQoIWV2ZW50LmlzQmVpbmdEaXNwYXRjaGVkKCkpOworCisg
ICAgZXZlbnQuc2V0VGFyZ2V0KHRoaXMpOworICAgIGV2ZW50LnNldEN1cnJlbnRUYXJnZXQodGhp
cyk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICBib29s
IGRlZmF1bHRQcmV2ZW50ZWQgPSBmaXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQpOworICAgIGV2ZW50
LnNldEV2ZW50UGhhc2UoMCk7CiAgICAgcmV0dXJuIGRlZmF1bHRQcmV2ZW50ZWQ7CiB9CiAKQEAg
LTE2NiwzMCArMTY5LDMwIEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnVuY2F1Z2h0RXhjZXB0aW9uSW5F
dmVudEhhbmRsZXIoKQogewogfQogCi1zdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBsZWdhY3lU
eXBlKGNvbnN0IEV2ZW50KiBldmVudCkKK3N0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGxlZ2Fj
eVR5cGUoY29uc3QgRXZlbnQmIGV2ZW50KQogewotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCkKKyAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCkKICAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS53ZWJraXRBbmltYXRpb25FbmRFdmVudDsKIAotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5hbmltYXRpb25zdGFydEV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQpCiAgICAgICAgIHJldHVybiBldmVudE5h
bWVzKCkud2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudDsKIAotICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25pdGVyYXRpb25FdmVudCkKKyAgICBpZiAoZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25pdGVyYXRpb25FdmVudCkKICAgICAgICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudDsKIAotICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQpCisg
ICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudHJhbnNpdGlvbmVuZEV2ZW50KQog
ICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLndlYmtpdFRyYW5zaXRpb25FbmRFdmVudDsKIAot
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVlbEV2ZW50KQorICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQpCiAgICAgICAgIHJldHVy
biBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50OwogCiAgICAgcmV0dXJuIGVtcHR5QXRvbTsK
IH0KIAotYm9vbCBFdmVudFRhcmdldDo6ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCkK
K2Jvb2wgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCYgZXZlbnQpCiB7CiAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIU5vRXZlbnREaXNwYXRjaEFzc2Vy
dGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIEFTU0VSVChldmVudCAmJiBl
dmVudC0+aXNJbml0aWFsaXplZCgpKTsKKyAgICBBU1NFUlQoZXZlbnQuaXNJbml0aWFsaXplZCgp
KTsKIAogICAgIEV2ZW50VGFyZ2V0RGF0YSogZCA9IGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIGlm
ICghZCkKQEAgLTIwMCwyMSArMjAzLDIxIEBAIGJvb2wgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExp
c3RlbmVycyhFdmVudCogZXZlbnQpCiAgICAgaWYgKCFsZWdhY3lUeXBlTmFtZS5pc0VtcHR5KCkp
CiAgICAgICAgIGxlZ2FjeUxpc3RlbmVyc1ZlY3RvciA9IGQtPmV2ZW50TGlzdGVuZXJNYXAuZmlu
ZChsZWdhY3lUeXBlTmFtZSk7CiAKLSAgICBFdmVudExpc3RlbmVyVmVjdG9yKiBsaXN0ZW5lcnNW
ZWN0b3IgPSBkLT5ldmVudExpc3RlbmVyTWFwLmZpbmQoZXZlbnQtPnR5cGUoKSk7CisgICAgRXZl
bnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJzVmVjdG9yID0gZC0+ZXZlbnRMaXN0ZW5lck1hcC5m
aW5kKGV2ZW50LnR5cGUoKSk7CiAKICAgICBpZiAobGlzdGVuZXJzVmVjdG9yKQogICAgICAgICBm
aXJlRXZlbnRMaXN0ZW5lcnMoZXZlbnQsIGQsICpsaXN0ZW5lcnNWZWN0b3IpOwogICAgIGVsc2Ug
aWYgKGxlZ2FjeUxpc3RlbmVyc1ZlY3RvcikgewotICAgICAgICBBdG9taWNTdHJpbmcgdHlwZU5h
bWUgPSBldmVudC0+dHlwZSgpOwotICAgICAgICBldmVudC0+c2V0VHlwZShsZWdhY3lUeXBlTmFt
ZSk7CisgICAgICAgIEF0b21pY1N0cmluZyB0eXBlTmFtZSA9IGV2ZW50LnR5cGUoKTsKKyAgICAg
ICAgZXZlbnQuc2V0VHlwZShsZWdhY3lUeXBlTmFtZSk7CiAgICAgICAgIGZpcmVFdmVudExpc3Rl
bmVycyhldmVudCwgZCwgKmxlZ2FjeUxpc3RlbmVyc1ZlY3Rvcik7Ci0gICAgICAgIGV2ZW50LT5z
ZXRUeXBlKHR5cGVOYW1lKTsKKyAgICAgICAgZXZlbnQuc2V0VHlwZSh0eXBlTmFtZSk7CiAgICAg
fQogCi0gICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIHJldHVybiAh
ZXZlbnQuZGVmYXVsdFByZXZlbnRlZCgpOwogfQogICAgICAgICAKLXZvaWQgRXZlbnRUYXJnZXQ6
OmZpcmVFdmVudExpc3RlbmVycyhFdmVudCogZXZlbnQsIEV2ZW50VGFyZ2V0RGF0YSogZCwgRXZl
bnRMaXN0ZW5lclZlY3RvciYgZW50cnkpCit2b2lkIEV2ZW50VGFyZ2V0OjpmaXJlRXZlbnRMaXN0
ZW5lcnMoRXZlbnQmIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50TGlzdGVuZXJWZWN0
b3ImIGVudHJ5KQogewogICAgIFJlZjxFdmVudFRhcmdldD4gcHJvdGVjdCgqdGhpcyk7CiAKQEAg
LTIyNiwzMiArMjI5LDMyIEBAIHZvaWQgRXZlbnRUYXJnZXQ6OmZpcmVFdmVudExpc3RlbmVycyhF
dmVudCogZXZlbnQsIEV2ZW50VGFyZ2V0RGF0YSogZCwgRXZlbnRMaXN0CiAgICAgc2l6ZV90IHNp
emUgPSBlbnRyeS5zaXplKCk7CiAgICAgaWYgKCFkLT5maXJpbmdFdmVudEl0ZXJhdG9ycykKICAg
ICAgICAgZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPEZpcmluZ0V2
ZW50SXRlcmF0b3JWZWN0b3I+KCk7Ci0gICAgZC0+ZmlyaW5nRXZlbnRJdGVyYXRvcnMtPmFwcGVu
ZChGaXJpbmdFdmVudEl0ZXJhdG9yKGV2ZW50LT50eXBlKCksIGksIHNpemUpKTsKKyAgICBkLT5m
aXJpbmdFdmVudEl0ZXJhdG9ycy0+YXBwZW5kKEZpcmluZ0V2ZW50SXRlcmF0b3IoZXZlbnQudHlw
ZSgpLCBpLCBzaXplKSk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG51bGxw
dHI7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50
Q29va2llOwogICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpIHsKICAgICAgICAgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCk7Ci0gICAgICAgIHdpbGxEaXNwYXRjaEV2
ZW50Q29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0Y2hFdmVudCgq
ZG9jdW1lbnQsICpldmVudCwgc2l6ZSA+IDApOworICAgICAgICB3aWxsRGlzcGF0Y2hFdmVudENv
b2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnQoKmRvY3Vt
ZW50LCBldmVudCwgc2l6ZSA+IDApOwogICAgIH0KIAogICAgIGZvciAoOyBpIDwgc2l6ZTsgKytp
KSB7CiAgICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkTGlzdGVuZXIg
PSBlbnRyeVtpXTsKLSAgICAgICAgaWYgKGV2ZW50LT5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkNB
UFRVUklOR19QSEFTRSAmJiAhcmVnaXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUpCisgICAgICAg
IGlmIChldmVudC5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkNBUFRVUklOR19QSEFTRSAmJiAhcmVn
aXN0ZXJlZExpc3RlbmVyLnVzZUNhcHR1cmUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKGV2ZW50LT5ldmVudFBoYXNlKCkgPT0gRXZlbnQ6OkJVQkJMSU5HX1BIQVNFICYmIHJl
Z2lzdGVyZWRMaXN0ZW5lci51c2VDYXB0dXJlKQorICAgICAgICBpZiAoZXZlbnQuZXZlbnRQaGFz
ZSgpID09IEV2ZW50OjpCVUJCTElOR19QSEFTRSAmJiByZWdpc3RlcmVkTGlzdGVuZXIudXNlQ2Fw
dHVyZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIElmIHN0b3BJbW1lZGlh
dGVQcm9wYWdhdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHdlIGp1c3QgYnJlYWsgb3V0IGltbWVkaWF0
ZWx5LCB3aXRob3V0CiAgICAgICAgIC8vIGhhbmRsaW5nIGFueSBtb3JlIGV2ZW50cyBvbiB0aGlz
IHRhcmdldC4KLSAgICAgICAgaWYgKGV2ZW50LT5pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQo
KSkKKyAgICAgICAgaWYgKGV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
IGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEhhbmRsZUV2ZW50KGNvbnRl
eHQsICpldmVudCk7CisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29r
aWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxIYW5kbGVFdmVudChjb250ZXh0LCBl
dmVudCk7CiAgICAgICAgIC8vIFRvIG1hdGNoIE1vemlsbGEsIHRoZSBBVF9UQVJHRVQgcGhhc2Ug
ZmlyZXMgYm90aCBjYXB0dXJpbmcgYW5kIGJ1YmJsaW5nCiAgICAgICAgIC8vIGV2ZW50IGxpc3Rl
bmVycywgZXZlbiB0aG91Z2ggdGhhdCB2aW9sYXRlcyBzb21lIHZlcnNpb25zIG9mIHRoZSBET00g
c3BlYy4KLSAgICAgICAgcmVnaXN0ZXJlZExpc3RlbmVyLmxpc3RlbmVyLT5oYW5kbGVFdmVudChj
b250ZXh0LCBldmVudCk7CisgICAgICAgIHJlZ2lzdGVyZWRMaXN0ZW5lci5saXN0ZW5lci0+aGFu
ZGxlRXZlbnQoY29udGV4dCwgJmV2ZW50KTsKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRIYW5kbGVFdmVudChjb29raWUpOwogICAgIH0KICAgICBkLT5maXJpbmdFdmVudEl0
ZXJhdG9ycy0+cmVtb3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAppbmRleCA2ODhl
NmZmNzBiOTJjYjY4OTNiYzk5ZGU3OTBmMDY4OWQ3YTc5MmVmLi43MDc3Nzc0MWE3YzRmYTI3MWYw
M2VhYzIzZWM3NDZmYjljNTZhM2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRUYXJnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaApAQCAtMTIz
LDggKzEyMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYsIGJv
b2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCBib29sIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1
cmUpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwotICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKLSAgICBib29sIGRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsgLy8gRE9NIEFQ
SQorICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jik7CisgICAgYm9vbCBkaXNw
YXRjaEV2ZW50KEV2ZW50KiwgRXhjZXB0aW9uQ29kZSYpOyAvLyBET00gQVBJCiAgICAgdmlydHVh
bCB2b2lkIHVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKTsKIAogICAgIC8vIFVzZWQg
Zm9yIGxlZ2FjeSAib25FdmVudCIgYXR0cmlidXRlIEFQSXMuCkBAIC0xMzcsNyArMTM3LDcgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzQ2FwdHVyaW5nRXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUpOwogICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGdldEV2
ZW50TGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKIAotICAgIGJvb2wg
ZmlyZUV2ZW50TGlzdGVuZXJzKEV2ZW50Kik7CisgICAgYm9vbCBmaXJlRXZlbnRMaXN0ZW5lcnMo
RXZlbnQmKTsKICAgICBib29sIGlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMoKTsKIAogICAgIHZvaWQg
dmlzaXRKU0V2ZW50TGlzdGVuZXJzKEpTQzo6U2xvdFZpc2l0b3ImKTsKQEAgLTE1Myw3ICsxNTMs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpID0gMDsKICAgICAKLSAgICB2b2lkIGZp
cmVFdmVudExpc3RlbmVycyhFdmVudCosIEV2ZW50VGFyZ2V0RGF0YSosIEV2ZW50TGlzdGVuZXJW
ZWN0b3ImKTsKKyAgICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCYsIEV2ZW50VGFyZ2V0
RGF0YSosIEV2ZW50TGlzdGVuZXJWZWN0b3ImKTsKIAogICAgIGZyaWVuZCBjbGFzcyBFdmVudExp
c3RlbmVySXRlcmF0b3I7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0dlbmVy
aWNFdmVudFF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9HZW5lcmljRXZlbnRRdWV1ZS5j
cHAKaW5kZXggNzJkZDBmZWVkMDJhZTJkYzdjOWYzZmQ2Y2Q3Y2RhOTkzMTZjMzkyYS4uZGJhODUy
NzBkYjQ3OTRmNmZhYjIzYTI2YjM5ZjFjYjU5NGIxZGQyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0dlbmVyaWNFdmVudFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
R2VuZXJpY0V2ZW50UXVldWUuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBHZW5lcmljRXZl
bnRRdWV1ZTo6ZGlzcGF0Y2hPbmVFdmVudCgpCiAgICAgUmVmPEV2ZW50VGFyZ2V0PiBwcm90ZWN0
KG1fb3duZXIpOwogICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBtX3BlbmRpbmdFdmVudHMudGFr
ZUZpcnN0KCk7CiAgICAgRXZlbnRUYXJnZXQmIHRhcmdldCA9IGV2ZW50LT50YXJnZXQoKSA/ICpl
dmVudC0+dGFyZ2V0KCkgOiBtX293bmVyOwotICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50
LnJlbGVhc2UoKSk7CisgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoKmV2ZW50KTsKIH0KIAogdm9p
ZCBHZW5lcmljRXZlbnRRdWV1ZTo6Y2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL01lc3NhZ2VQb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAK
aW5kZXggYzMyNTY4NDRmNDg0NThlOWJjNzQ3Y2MwZTlkOWQzNzUwNzhkOGViMC4uYTNhYjg5NmJm
NTNjZjhhMDdkZTVlOTJmZTk2Nzc0OTNhNmY5NDNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL01lc3NhZ2VQb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuY3BwCkBAIC0xNjAsOSArMTYwLDggQEAgdm9pZCBNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNz
YWdlcygpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1l
c3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKm1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgV1RGOjptb3ZlKGNoYW5uZWxzKSk7Ci0gICAgICAgIFJlZlB0
cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoV1RGOjptb3ZlKHBvcnRzKSwgbWVz
c2FnZS5yZWxlYXNlKCkpOwotCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoZXZ0LnJlbGVhc2UoKSwg
QVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIFJlZjxFdmVudD4gZXZlbnQgPSBNZXNzYWdl
RXZlbnQ6OmNyZWF0ZShXVEY6Om1vdmUocG9ydHMpLCBtZXNzYWdlLnJlbGVhc2UoKSk7CisgICAg
ICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4
IDM4N2NhZWIwZjUzYmMxMmI4NDk2MzAwZjliODM4ZTdiYTliYjI5NzQuLjA4ZmEwMjQ2YTUzM2E1
MjgyZTM0NmNhZTE2NGFiMmViNGE1MGE1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTIwOTAsMTkg
KzIwOTAsMTkgQEAgdm9pZCBOb2RlOjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYgZXZlbnQpCiAg
ICAgaWYgKGlzPEVsZW1lbnQ+KCp0aGlzKSAmJiBkb3duY2FzdDxFbGVtZW50PigqdGhpcykuaXNE
aXNhYmxlZEZvcm1Db250cm9sKCkgJiYgZXZlbnQuaXNNb3VzZUV2ZW50KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGZpcmVFdmVudExpc3RlbmVycygmZXZlbnQpOworICAgIGZpcmVFdmVudExp
c3RlbmVycyhldmVudCk7CiB9CiAKLXZvaWQgTm9kZTo6ZGlzcGF0Y2hTY29wZWRFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKK3ZvaWQgTm9kZTo6ZGlzcGF0Y2hTY29wZWRFdmVudChFdmVu
dCYgZXZlbnQpCiB7CiAgICAgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2ZW50KCp0
aGlzLCBldmVudCk7CiB9CiAKLWJvb2wgTm9kZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIVBMQVRGT1JNKElPUykKLSAgICBpZiAoaXM8VG91
Y2hFdmVudD4oKmV2ZW50KSkKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoVG91Y2hFdmVudChhZG9w
dFJlZihkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudC5sZWFrUmVmKCkpKSk7CisgICAgaWYgKGlz
PFRvdWNoRXZlbnQ+KGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIGRpc3BhdGNoVG91Y2hFdmVudChk
b3duY2FzdDxUb3VjaEV2ZW50PihldmVudCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIEV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVudCk7CiB9CkBAIC0yMTI2LDI0ICsyMTI2
LDI0IEBAIHZvaWQgTm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpCiBib29sIE5v
ZGU6OmRpc3BhdGNoRE9NQWN0aXZhdGVFdmVudChpbnQgZGV0YWlsLCBQYXNzUmVmUHRyPEV2ZW50
PiB1bmRlcmx5aW5nRXZlbnQpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkp
OwotICAgIFJlZlB0cjxVSUV2ZW50PiBldmVudCA9IFVJRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuRE9NQWN0aXZhdGVFdmVudCwgdHJ1ZSwgdHJ1ZSwgZG9jdW1lbnQoKS5kZWZhdWx0Vmlldygp
LCBkZXRhaWwpOworICAgIFJlZjxVSUV2ZW50PiBldmVudCA9IFVJRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCwgdHJ1ZSwgdHJ1ZSwgZG9jdW1lbnQoKS5kZWZhdWx0
VmlldygpLCBkZXRhaWwpOwogICAgIGV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWlu
Z0V2ZW50KTsKICAgICBkaXNwYXRjaFNjb3BlZEV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gZXZl
bnQtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAh
UExBVEZPUk0oSU9TKQotYm9vbCBOb2RlOjpkaXNwYXRjaFRvdWNoRXZlbnQoUGFzc1JlZlB0cjxU
b3VjaEV2ZW50PiBldmVudCkKK2Jvb2wgTm9kZTo6ZGlzcGF0Y2hUb3VjaEV2ZW50KFRvdWNoRXZl
bnQmIGV2ZW50KQogewogICAgIHJldHVybiBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQo
dGhpcywgZXZlbnQpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5ESUVfVUkpCi1ib29sIE5v
ZGU6OmRpc3BhdGNoVUlSZXF1ZXN0RXZlbnQoUGFzc1JlZlB0cjxVSVJlcXVlc3RFdmVudD4gZXZl
bnQpCitib29sIE5vZGU6OmRpc3BhdGNoVUlSZXF1ZXN0RXZlbnQoVUlSZXF1ZXN0RXZlbnQmIGV2
ZW50KQogewogICAgIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudCh0aGlzLCBldmVudCk7
Ci0gICAgcmV0dXJuIGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpIHx8IGV2ZW50LT5kZWZhdWx0UHJl
dmVudGVkKCk7CisgICAgcmV0dXJuIGV2ZW50LmRlZmF1bHRIYW5kbGVkKCkgfHwgZXZlbnQuZGVm
YXVsdFByZXZlbnRlZCgpOwogfQogI2VuZGlmCiAgICAgCkBAIC0yMTUzLDggKzIxNTMsOCBAQCBi
b29sIE5vZGU6OmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJM
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFJlZjxOb2RlPiBwcm90ZWN0KCp0aGlzKTsK
LSAgICBSZWZQdHI8QmVmb3JlTG9hZEV2ZW50PiBiZWZvcmVMb2FkRXZlbnQgPSBCZWZvcmVMb2Fk
RXZlbnQ6OmNyZWF0ZShzb3VyY2VVUkwpOwotICAgIGRpc3BhdGNoRXZlbnQoYmVmb3JlTG9hZEV2
ZW50LmdldCgpKTsKKyAgICBSZWY8QmVmb3JlTG9hZEV2ZW50PiBiZWZvcmVMb2FkRXZlbnQgPSBC
ZWZvcmVMb2FkRXZlbnQ6OmNyZWF0ZShzb3VyY2VVUkwpOworICAgIGRpc3BhdGNoRXZlbnQoYmVm
b3JlTG9hZEV2ZW50KTsKICAgICByZXR1cm4gIWJlZm9yZUxvYWRFdmVudC0+ZGVmYXVsdFByZXZl
bnRlZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBlZmYwODZhNWJlZTJlMGJmODViNzdhYzg3ZWJj
MjFhNTA3NTNhYmQ3Li43YjU4ZjRmOGQyM2E4ZGEyMTlmOGM5NGY4M2ZiNzlhYzVhNDkyMjMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgKQEAgLTUxOSw5ICs1MTksOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50
TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpIG92ZXJyaWRlOwogCiAgICAgdXNpbmcgRXZlbnRU
YXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50
KEV2ZW50Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRpc3BhdGNoU2NvcGVkRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pOworICAgIHZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChFdmVudCYpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50Jik7CiAKQEAgLTUzMywxMCAr
NTMzLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYg
IVBMQVRGT1JNKElPUykKLSAgICBib29sIGRpc3BhdGNoVG91Y2hFdmVudChQYXNzUmVmUHRyPFRv
dWNoRXZlbnQ+KTsKKyAgICBib29sIGRpc3BhdGNoVG91Y2hFdmVudChUb3VjaEV2ZW50Jik7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoSU5ESUVfVUkpCi0gICAgYm9vbCBkaXNwYXRjaFVJUmVxdWVzdEV2
ZW50KFBhc3NSZWZQdHI8VUlSZXF1ZXN0RXZlbnQ+KTsKKyAgICBib29sIGRpc3BhdGNoVUlSZXF1
ZXN0RXZlbnQoVUlSZXF1ZXN0RXZlbnQmKTsKICNlbmRpZgogCiAgICAgYm9vbCBkaXNwYXRjaEJl
Zm9yZUxvYWRFdmVudChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NvcGVkRXZlbnRRdWV1ZS5jcHAKaW5kZXggMjBmMThjZDRjMmNiODcyZTY3NmRjNzE1MzY3NWY1
ZTllYjg0NmYzOS4uOTM1MDEzMjM0ODRhMzU0NDM4ZjQxZGExYjM5NzAwM2FhOWQ5N2EyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY29wZWRFdmVudFF1ZXVlLmNwcApAQCAtNDMsMjcgKzQzLDI3IEBA
IFNjb3BlZEV2ZW50UXVldWUmIFNjb3BlZEV2ZW50UXVldWU6OnNpbmdsZXRvbigpCiAgICAgcmV0
dXJuIHNjb3BlZEV2ZW50UXVldWU7CiB9CiAKLXZvaWQgU2NvcGVkRXZlbnRRdWV1ZTo6ZW5xdWV1
ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQordm9pZCBTY29wZWRFdmVudFF1ZXVlOjpl
bnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAgIGlmIChtX3Njb3BpbmdMZXZl
bCkKLSAgICAgICAgbV9xdWV1ZWRFdmVudHMuYXBwZW5kKGV2ZW50KTsKKyAgICAgICAgbV9xdWV1
ZWRFdmVudHMuYXBwZW5kKFdURjo6bW92ZShldmVudCkpOwogICAgIGVsc2UKICAgICAgICAgZGlz
cGF0Y2hFdmVudChldmVudCk7CiB9CiAKLXZvaWQgU2NvcGVkRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkgY29uc3QKK3ZvaWQgU2NvcGVkRXZlbnRRdWV1
ZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGV2ZW50
LT50YXJnZXQoKSk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpKTsKICAgICAvLyBTdG9yZSB0
aGUgdGFyZ2V0IGluIGEgbG9jYWwgdmFyaWFibGUgdG8gYXZvaWQgcG9zc2libHkgZGVyZWZlcmVu
Y2luZyBhIG51bGxpZmllZCBQYXNzUmVmUHRyIGFmdGVyIGl0J3MgcGFzc2VkIG9uLgotICAgIE5v
ZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBl
dmVudC50YXJnZXQoKS0+dG9Ob2RlKCk7CiAgICAgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2
ZW50KG5vZGUsIGV2ZW50KTsKIH0KIAogdm9pZCBTY29wZWRFdmVudFF1ZXVlOjpkaXNwYXRjaEFs
bEV2ZW50cygpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+IHF1ZXVlZEV2ZW50cyA9IFdU
Rjo6bW92ZShtX3F1ZXVlZEV2ZW50cyk7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IHF1ZXVlZEV2
ZW50cyA9IFdURjo6bW92ZShtX3F1ZXVlZEV2ZW50cyk7CiAgICAgZm9yIChhdXRvJiBxdWV1ZWRF
dmVudCA6IHF1ZXVlZEV2ZW50cykKLSAgICAgICAgZGlzcGF0Y2hFdmVudChxdWV1ZWRFdmVudC5y
ZWxlYXNlKCkpOworICAgICAgICBkaXNwYXRjaEV2ZW50KHF1ZXVlZEV2ZW50KTsKIH0KIAogdm9p
ZCBTY29wZWRFdmVudFF1ZXVlOjppbmNyZW1lbnRTY29waW5nTGV2ZWwoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY29wZWRFdmVudFF1ZXVlLmgKaW5kZXggY2Y2YjI5YzhkOTkxMzdiMDVlYzY0ZTYwNDdmMzQy
ZTVhMjdkZmNiMC4uNzhiYmM2NWYzOWFkZDM3ZDQyMWJlMDQyZTMwOWY5YmZhYjA1MTcyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5oCkBAIC00NiwxOCArNDYsMTggQEAgY2xh
c3MgU2NvcGVkRXZlbnRRdWV1ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NvcGVkRXZl
bnRRdWV1ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBT
Y29wZWRFdmVudFF1ZXVlJiBzaW5nbGV0b24oKTsKLSAgICB2b2lkIGVucXVldWVFdmVudChQYXNz
UmVmUHRyPEV2ZW50Pik7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKIAog
cHJpdmF0ZToKICAgICBTY29wZWRFdmVudFF1ZXVlKCkgPSBkZWZhdWx0OwogICAgIH5TY29wZWRF
dmVudFF1ZXVlKCkgPSBkZWxldGU7CiAKLSAgICB2b2lkIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4pIGNvbnN0OworICAgIHZvaWQgZGlzcGF0Y2hFdmVudChFdmVudCYpIGNvbnN0Owog
ICAgIHZvaWQgZGlzcGF0Y2hBbGxFdmVudHMoKTsKICAgICB2b2lkIGluY3JlbWVudFNjb3BpbmdM
ZXZlbCgpOwogICAgIHZvaWQgZGVjcmVtZW50U2NvcGluZ0xldmVsKCk7CiAKLSAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50Pj4gbV9xdWV1ZWRFdmVudHM7CisgICAgVmVjdG9yPFJlZjxFdmVudD4+IG1f
cXVldWVkRXZlbnRzOwogICAgIHVuc2lnbmVkIG1fc2NvcGluZ0xldmVsIHsgMCB9OwogCiAgICAg
ZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8V2ViQ29yZTo6U2NvcGVkRXZlbnRRdWV1
ZT47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5k
ZXggNDJmNWU3OTkzOTJmNTFmYzc5ZGRkMTEzNTMzOTJhZTQ3NmJjMmVmYi4uZjA1MmQ4NmViNTQ1
MGMyNzAzOGJkNTRjZGRkNTZjOGM4NWQwOTlmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtNDA0LDcgKzQwNCw3IEBAIGJvb2wgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6ZGlzcGF0Y2hFcnJvckV2ZW50KGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBpbnQKIAogICAgIEFTU0VSVCghbV9pbkRpc3BhdGNoRXJyb3JFdmVudCk7CiAgICAg
bV9pbkRpc3BhdGNoRXJyb3JFdmVudCA9IHRydWU7Ci0gICAgUmVmUHRyPEVycm9yRXZlbnQ+IGVy
cm9yRXZlbnQgPSBFcnJvckV2ZW50OjpjcmVhdGUobWVzc2FnZSwgc291cmNlTmFtZSwgbGluZSwg
Y29sdW1uKTsKKyAgICBSZWY8RXJyb3JFdmVudD4gZXJyb3JFdmVudCA9IEVycm9yRXZlbnQ6OmNy
ZWF0ZShtZXNzYWdlLCBzb3VyY2VOYW1lLCBsaW5lLCBjb2x1bW4pOwogICAgIHRhcmdldC0+ZGlz
cGF0Y2hFdmVudChlcnJvckV2ZW50KTsKICAgICBtX2luRGlzcGF0Y2hFcnJvckV2ZW50ID0gZmFs
c2U7CiAgICAgcmV0dXJuIGVycm9yRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmlu
ZGV4IDY4OTM3NzBlZTAxZDZkYjVmYTk2ZTEyYTQ3MDMxMTE2ZGMzYjM5N2UuLmI3MWY5NzNlN2Uz
MDFiZWQwNDE3N2FiNzZhYWFiMGEzMWU2YzU3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtNjgyLDEwICs2ODIs
MTAgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0g
bV9mcmFtZS52aWV3KCkpCiAgICAgICAgIHZpZXctPmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGlu
Z1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24oKTsKIAotICAgIFJlZlB0cjxUZXh0RXZlbnQ+IGV2
ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGVGb3JEaWN0YXRpb24obV9mcmFtZS5kb2N1bWVudCgpLT5k
b21XaW5kb3coKSwgdGV4dCwgZGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKKyAgICBSZWY8VGV4dEV2
ZW50PiBldmVudCA9IFRleHRFdmVudDo6Y3JlYXRlRm9yRGljdGF0aW9uKG1fZnJhbWUuZG9jdW1l
bnQoKS0+ZG9tV2luZG93KCksIHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgZXZl
bnQtPnNldFVuZGVybHlpbmdFdmVudCh0cmlnZ2VyaW5nRXZlbnQpOwogCi0gICAgdGFyZ2V0LT5k
aXNwYXRjaEV2ZW50KGV2ZW50LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICB0YXJnZXQtPmRpc3Bh
dGNoRXZlbnQoZXZlbnQpOwogICAgIHJldHVybiBldmVudC0+ZGVmYXVsdEhhbmRsZWQoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGFmNTI4NmRjOTFlYWZlZWFhMGFhYjZh
OTY1ZjQ2ZjdjOTgyNTBkZWMuLmNmMWJlMmFiZTY0ZmE3NDZhZTZiMTA1YjQ2NDE3ODBiNzQ1MGU1
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTQ2MSw3ICs0NjEsNyBAQCB2b2lk
IEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dChjb25zdCBTdHJpbmcmIHBhc3RpbmdUZXh0LCBib29s
IHNtYXJ0UmVwbGFjZSkKICAgICBOb2RlKiB0YXJnZXQgPSBmaW5kRXZlbnRUYXJnZXRGcm9tU2Vs
ZWN0aW9uKCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybjsKLSAgICB0YXJnZXQt
PmRpc3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JQbGFpblRleHRQYXN0ZShkb2N1bWVu
dCgpLmRvbVdpbmRvdygpLCBwYXN0aW5nVGV4dCwgc21hcnRSZXBsYWNlKSwgSUdOT1JFX0VYQ0VQ
VElPTik7CisgICAgdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yUGxh
aW5UZXh0UGFzdGUoZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgcGFzdGluZ1RleHQsIHNtYXJ0UmVw
bGFjZSkpOwogfQogCiB2b2lkIEVkaXRvcjo6cGFzdGVBc0ZyYWdtZW50KFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gcGFzdGluZ0ZyYWdtZW50LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBt
YXRjaFN0eWxlLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIHJlc3BlY3RzTWFpbEJsb2NrcXVvdGUp
CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlQXNGcmFnbWVudChQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IHBhc3RpbmdGcmFnbWVudCwgYm9vbAogICAgIE5vZGUqIHRh
cmdldCA9IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKTsKICAgICBpZiAoIXRhcmdldCkK
ICAgICAgICAgcmV0dXJuOwotICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNy
ZWF0ZUZvckZyYWdtZW50UGFzdGUoZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgcGFzdGluZ0ZyYWdt
ZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUsIHJlc3BlY3RzTWFpbEJsb2NrcXVvdGUpLCBJ
R05PUkVfRVhDRVBUSU9OKTsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoVGV4dEV2ZW50Ojpj
cmVhdGVGb3JGcmFnbWVudFBhc3RlKGRvY3VtZW50KCkuZG9tV2luZG93KCksIHBhc3RpbmdGcmFn
bWVudCwgc21hcnRSZXBsYWNlLCBtYXRjaFN0eWxlLCByZXNwZWN0c01haWxCbG9ja3F1b3RlKSk7
CiB9CiAKIHZvaWQgRWRpdG9yOjpwYXN0ZUFzUGxhaW5UZXh0QnlwYXNzaW5nREhUTUwoKQpAQCAt
ODUxLDggKzg1MSw4IEBAIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBEYXRhVHJhbnNmZXJBY2Nlc3NQCiAKICAgICBSZWZQdHI8RGF0
YVRyYW5zZmVyPiBkYXRhVHJhbnNmZXIgPSBEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvckNvcHlBbmRQ
YXN0ZShwb2xpY3kpOwogCi0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IENsaXBib2FyZEV2ZW50
OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVlLCB0cnVlLCBkYXRhVHJhbnNmZXIpOwotICAgIHRhcmdl
dC0+ZGlzcGF0Y2hFdmVudChldmVudCwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgUmVmPEV2ZW50
PiBldmVudCA9IENsaXBib2FyZEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVlLCB0cnVlLCBk
YXRhVHJhbnNmZXIpOworICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgYm9v
bCBub0RlZmF1bHRQcm9jZXNzaW5nID0gZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKICAgICBp
ZiAobm9EZWZhdWx0UHJvY2Vzc2luZyAmJiBwb2xpY3kgPT0gRGF0YVRyYW5zZmVyQWNjZXNzUG9s
aWN5OjpXcml0YWJsZSkgewogICAgICAgICBhdXRvIHBhc3RlYm9hcmQgPSBQYXN0ZWJvYXJkOjpj
cmVhdGVGb3JDb3B5QW5kUGFzdGUoKTsKQEAgLTEwMTIsOSArMTAxMiw5IEBAIHN0YXRpYyB2b2lk
IGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cyhQYXNzUmVmUHRyPEVsZW1lbnQ+
IHBycFN0YXJ0Um9vCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHN0YXJ0Um9vdCA9IHBycFN0YXJ0Um9v
dDsKICAgICBSZWZQdHI8RWxlbWVudD4gZW5kUm9vdCA9IHBycEVuZFJvb3Q7CiAgICAgaWYgKHN0
YXJ0Um9vdCkKLSAgICAgICAgc3RhcnRSb290LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZh
bHNlKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIHN0YXJ0Um9vdC0+ZGlzcGF0Y2hFdmVu
dChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2Vk
RXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogICAgIGlmIChlbmRSb290ICYmIGVuZFJvb3QgIT0gc3Rh
cnRSb290KQotICAgICAgICBlbmRSb290LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNl
KSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIGVuZFJvb3QtPmRpc3BhdGNoRXZlbnQoRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50
LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogdm9pZCBFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKFBhc3NS
ZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IGNtZCkKQEAgLTE3MjAsOCArMTcyMCw4IEBAIHZv
aWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFNldENvbXBvc2l0
aW9uTW9kZSBtb2RlKQogICAgIC8vIFdlIHNob3VsZCBzZW5kIHRoaXMgZXZlbnQgYmVmb3JlIHNl
bmRpbmcgYSBUZXh0RXZlbnQgYXMgd3JpdHRlbiBpbiBTZWN0aW9uIDYuMi4yIGFuZCA2LjIuMyBv
ZgogICAgIC8vIHRoZSBET00gRXZlbnQgc3BlY2lmaWNhdGlvbi4KICAgICBpZiAoRWxlbWVudCog
dGFyZ2V0ID0gZG9jdW1lbnQoKS5mb2N1c2VkRWxlbWVudCgpKSB7Ci0gICAgICAgIFJlZlB0cjxD
b21wb3NpdGlvbkV2ZW50PiBldmVudCA9IENvbXBvc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuY29tcG9zaXRpb25lbmRFdmVudCwgZG9jdW1lbnQoKS5kb21XaW5kb3coKSwgdGV4dCk7
Ci0gICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCksIElHTk9SRV9F
WENFUFRJT04pOworICAgICAgICBSZWY8Q29tcG9zaXRpb25FdmVudD4gZXZlbnQgPSBDb21wb3Np
dGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0aW9uZW5kRXZlbnQsIGRvY3Vt
ZW50KCkuZG9tV2luZG93KCksIHRleHQpOworICAgICAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQo
ZXZlbnQpOwogICAgIH0KIAogICAgIC8vIElmIHRleHQgaXMgZW1wdHksIHRoZW4gZGVsZXRlIHRo
ZSBvbGQgY29tcG9zaXRpb24gaGVyZS4gIElmIHRleHQgaXMgbm9uLWVtcHR5LCBJbnNlcnRUZXh0
Q29tbWFuZDo6aW5wdXQKQEAgLTE3OTUsOCArMTc5NSw4IEBAIHZvaWQgRWRpdG9yOjpzZXRDb21w
b3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVy
bGluCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZXZlbnQgPSBDb21wb3NpdGlv
bkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0aW9uZW5kRXZlbnQsIGRvY3VtZW50
KCkuZG9tV2luZG93KCksIHRleHQpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChldmVudC5nZXQo
KSkKLSAgICAgICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCwgSUdOT1JFX0VYQ0VQ
VElPTik7CisgICAgICAgIGlmIChldmVudCkKKyAgICAgICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hF
dmVudCgqZXZlbnQpOwogICAgIH0KIAogICAgIC8vIElmIHRleHQgaXMgZW1wdHksIHRoZW4gZGVs
ZXRlIHRoZSBvbGQgY29tcG9zaXRpb24gaGVyZS4gIElmIHRleHQgaXMgbm9uLWVtcHR5LCBJbnNl
cnRUZXh0Q29tbWFuZDo6aW5wdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNWI2OGY1N2NmYWMwYmJjYTlmMThiNDJiMWE1
YWIwYjE1ZmJjODU4Yi4uNzg5NzJjNzUyMjZiZGY1NGNiNzQ1NDk3Mjc4NzYzZGM0NzJhMDNiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAKQEAgLTE4MiwxNiArMTgyLDE2IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2Vt
ZW50RnJhZ21lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50KiBmCiAgICAg
cmVzdG9yZUFuZFJlbW92ZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgp
KTsKIAogICAgIC8vIEdpdmUgdGhlIHJvb3QgYSBjaGFuY2UgdG8gY2hhbmdlIHRoZSB0ZXh0Lgot
ICAgIFJlZlB0cjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZ0ID0gQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQ6OmNyZWF0ZSh0ZXh0KTsKLSAgICBlZGl0YWJsZVJvb3QtPmRpc3BhdGNoRXZlbnQo
ZXZ0LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBpZiAodGV4dCAhPSBldnQtPnRleHQoKSB8
fCAhZWRpdGFibGVSb290LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkpIHsKKyAgICBSZWY8QmVm
b3JlVGV4dEluc2VydGVkRXZlbnQ+IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNy
ZWF0ZSh0ZXh0KTsKKyAgICBlZGl0YWJsZVJvb3QtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAg
IGlmICh0ZXh0ICE9IGV2ZW50LT50ZXh0KCkgfHwgIWVkaXRhYmxlUm9vdC0+aGFzUmljaGx5RWRp
dGFibGVTdHlsZSgpKSB7CiAgICAgICAgIHJlc3RvcmVBbmRSZW1vdmVUZXN0UmVuZGVyaW5nTm9k
ZXNUb0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7CiAKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KCpyYW5nZSwgZXZ0LT50ZXh0KCkpOworICAgICAgICBtX2ZyYWdtZW50ID0gY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIGV2ZW50LT50ZXh0KCkpOwogICAgICAgICBpZiAo
IW1fZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3BwCmlu
ZGV4IGZkNzIxOWQ2MGEzYThmZmE2NjZlMDE1ZTVkYTEwNTJiMjZjYzFjNWMuLmNjYzNkZGVhZTJl
N2U4NTZiZmQyMzgzZmZlZWQ1MTBjMTU0NzhiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAKQEAgLTYzLDkgKzYzLDkgQEAg
U3RyaW5nIGRpc3BhdGNoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBpZiAoTm9kZSogc3RhcnROb2RlID0gc2VsZWN0
aW9uRm9ySW5zZXJ0aW9uLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpKSB7CiAgICAgICAgIGlmIChz
dGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gU2VuZCBC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4gVGhlIGV2ZW50IGhhbmRsZXIgd2lsbCB1cGRhdGUgdGV4
dCBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBSZWZQdHI8QmVmb3JlVGV4dEluc2VydGVkRXZl
bnQ+IGV2dCA9IEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUodGV4dCk7Ci0gICAgICAg
ICAgICBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+ZGlzcGF0Y2hFdmVudChldnQs
IElHTk9SRV9FWENFUFRJT04pOwotICAgICAgICAgICAgbmV3VGV4dCA9IGV2dC0+dGV4dCgpOwor
ICAgICAgICAgICAgUmVmPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldmVudCA9IEJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50OjpjcmVhdGUodGV4dCk7CisgICAgICAgICAgICBzdGFydE5vZGUtPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKS0+ZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgICAgICAgICBu
ZXdUZXh0ID0gZXZlbnQtPnRleHQoKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbmV3
VGV4dDsKQEAgLTc3LDggKzc3LDggQEAgYm9vbCBjYW5BcHBlbmROZXdMaW5lRmVlZFRvU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBSZWZQdHI8QmVmb3JlVGV4dEluc2VydGVk
RXZlbnQ+IGV2ZW50ID0gQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ6OmNyZWF0ZShTdHJpbmcoIlxu
IikpOwotICAgIG5vZGUtPmRpc3BhdGNoRXZlbnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04pOwor
ICAgIFJlZjxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudD4gZXZlbnQgPSBCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudDo6Y3JlYXRlKFN0cmluZygiXG4iKSk7CisgICAgbm9kZS0+ZGlzcGF0Y2hFdmVudChl
dmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT50ZXh0KCkubGVuZ3RoKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IDk1N2E5N2VhYTI0Mzc4NGNiZjUz
MjhjZGVlNzEzMGY4NDY2ZTJkOGEuLjBhZDYxZjM3ZWMyMWNiNDFhODEyNmVlMzQ2MzQyNjUwNjZh
ZDJkOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNTEy
MCwxMCArNTEyMCw5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDdXJyZW50
UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZChNZWRpYVBsCiAgICAgdXBkYXRlTWVkaWFT
dGF0ZShVcGRhdGVNZWRpYVN0YXRlOjpBc3luY2hyb25vdXNseSk7CiB9CiAKLWJvb2wgSFRNTE1l
ZGlhRWxlbWVudDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKK2Jv
b2wgSFRNTE1lZGlhRWxlbWVudDo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7Ci0gICAg
UmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwotICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS53ZWJraXRjdXJyZW50cGxheWJhY2t0YXJnZXRpc3dpcmVsZXNzY2hhbmdl
ZEV2ZW50KQorICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdGN1cnJl
bnRwbGF5YmFja3RhcmdldGlzd2lyZWxlc3NjaGFuZ2VkRXZlbnQpCiAgICAgICAgIHNjaGVkdWxl
RGVsYXllZEFjdGlvbihDaGVja1BsYXliYWNrVGFyZ2V0Q29tcGF0YWJsaXR5KTsKICAgICByZXR1
cm4gSFRNTEVsZW1lbnQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCAwNTBhY2I0NjA3MWE0ZmVjNTRhZjFjNmZlN2YzMWYw
YWUxOTgwNTkzLi5hMDNmMmM0ZmM2ZmRlZjZmMmVhN2YyZjRlM2UwODU2NWFlZWZmYjU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtNTY0LDcgKzU2NCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBlbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2Vk
RXZlbnQoKTsKIAogICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJyaWRlOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0Vs
ZW1lbnQuY3BwCmluZGV4IGQ2YjFmOWE2ZWI0ZDcyZDk5ZTBhZDkxYjg1MjRiOWQ0ZjhjNDUxNDUu
LmIzZWIzYjgwNGVkYjQzYzVlNzhiOGU0Y2RlNzE5Y2UwY2JkZTJjNmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcApAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgSFRN
TFRyYWNrRWxlbWVudDo6ZGlkQ29tcGxldGVMb2FkKExvYWRTdGF0dXMgc3RhdHVzKQogCiAgICAg
aWYgKHN0YXR1cyA9PSBGYWlsdXJlKSB7CiAgICAgICAgIHNldFJlYWR5U3RhdGUoSFRNTFRyYWNr
RWxlbWVudDo6VFJBQ0tfRVJST1IpOwotICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCBmYWxzZSksIElHTk9SRV9FWENFUFRJ
T04pOworICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVy
cm9yRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0y
NzEsNyArMjcxLDcgQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpkaWRDb21wbGV0ZUxvYWQoTG9h
ZFN0YXR1cyBzdGF0dXMpCiAKICAgICAvLyAgICAgMi4gSWYgdGhlIGZpbGUgd2FzIHN1Y2Nlc3Nm
dWxseSBwcm9jZXNzZWQsIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgbG9hZCBhdCB0aGUgCiAg
ICAgLy8gICAgICAgIHRyYWNrIGVsZW1lbnQuCi0gICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSksIElHTk9SRV9FWENFUFRJ
T04pOworICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2
ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogLy8gTk9URTogVGhlIHZhbHVlcyBpbiB0aGUgVGV4
dFRyYWNrOjpSZWFkaW5lc3NTdGF0ZSBlbnVtIG11c3Qgc3RheSBpbiBzeW5jIHdpdGggdGhvc2Ug
aW4gSFRNTFRyYWNrRWxlbWVudDo6UmVhZHlTdGF0ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFD
b250cm9sbGVyLmNwcAppbmRleCA5NjM3MjQ0Njc2ODc0MDRlZDYyZWUzN2QwMTRlZjRkNjUzMzcw
NzIxLi5kYmIwMmFiOWU5NDkxMjE5NDZhMDBlYmFkNzNhMTgyMGM3ZjE2YjAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuY3BwCkBAIC01NDQsMTEgKzU0NCwxMSBAQCB2b2lk
IE1lZGlhQ29udHJvbGxlcjo6c2NoZWR1bGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
TmFtZSkKIAogdm9pZCBNZWRpYUNvbnRyb2xsZXI6OmFzeW5jRXZlbnRUaW1lckZpcmVkKCkKIHsK
LSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gcGVuZGluZ0V2ZW50czsKKyAgICBWZWN0b3I8UmVm
PEV2ZW50Pj4gcGVuZGluZ0V2ZW50czsKIAogICAgIG1fcGVuZGluZ0V2ZW50cy5zd2FwKHBlbmRp
bmdFdmVudHMpOwogICAgIGZvciAoYXV0byYgcGVuZGluZ0V2ZW50IDogcGVuZGluZ0V2ZW50cykK
LSAgICAgICAgZGlzcGF0Y2hFdmVudChwZW5kaW5nRXZlbnQucmVsZWFzZSgpLCBJR05PUkVfRVhD
RVBUSU9OKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChwZW5kaW5nRXZlbnQpOwogfQogCiB2b2lk
IE1lZGlhQ29udHJvbGxlcjo6Y2xlYXJQb3NpdGlvblRpbWVyRmlyZWQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvTWVkaWFDb250cm9sbGVyLmgKaW5kZXggNzUzM2I0OGMyNzhmNWQ2MWM1ZjZlMDIyY2U3NGMz
NjE4NTY4NDJiYy4uMzE1ZWVjZDE5MWEzYzY3OWExMjIwY2MwZjZkOWI4M2NkMGYyNTJhNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9NZWRpYUNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL01lZGlhQ29udHJvbGxlci5oCkBAIC0xNDUsNyArMTQ1LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fbXV0ZWQ7CiAgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiAg
ICAgUGxheWJhY2tTdGF0ZSBtX3BsYXliYWNrU3RhdGU7Ci0gICAgVmVjdG9yPFJlZlB0cjxFdmVu
dD4+IG1fcGVuZGluZ0V2ZW50czsKKyAgICBWZWN0b3I8UmVmPEV2ZW50Pj4gbV9wZW5kaW5nRXZl
bnRzOwogICAgIFRpbWVyIG1fYXN5bmNFdmVudFRpbWVyOwogICAgIG11dGFibGUgVGltZXIgbV9j
bGVhclBvc2l0aW9uVGltZXI7CiAgICAgU3RyaW5nIG1fbWVkaWFHcm91cDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKaW5kZXggMzMwYzk1MDRiMDc2OWQ5NDA3MjMxN2RkZDI5OTNkMjk4YjlmOWFkYy4uZWQzMDQ5
ZDM4NjY2NDk0NWUwOTlkNjYzZGE4MjlkYjY1OTIzOGQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAg
LTQ3NjYsNyArNDc2Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9y
ZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQogCiB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVudCgpCiB7Ci0gICAgUmVmUHRy
PFdlYkdMQ29udGV4dEV2ZW50PiBldmVudCA9IFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLndlYmdsY29udGV4dGxvc3RFdmVudCwgZmFsc2UsIHRydWUsICIiKTsKKyAgICBS
ZWY8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOwogICAg
IGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICAgICBtX3Jlc3RvcmVBbGxvd2VkID0g
ZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKICAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0g
UmVhbExvc3RDb250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4IGVlYTBlYzc1NzVkNzczYzhi
NDk1NTViODZkNjRiOTgwM2ZlZmFjYjguLmVkYjA2MjcyY2M4MDE5NDc5OGJmYTJmZWYwYjRiMDQx
YmFkMWFmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3Jp
cHRSdW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRS
dW5uZXIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBVUkwgZG9jdW1lbnRVUkxGb3JTY3Jp
cHRFeGVjdXRpb24oRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiBkb2N1bWVudC0+ZnJh
bWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCk7CiB9CiAKLWlubGluZSBQYXNzUmVmUHRyPEV2ZW50PiBj
cmVhdGVTY3JpcHRMb2FkRXZlbnQoKQoraW5saW5lIFJlZjxFdmVudD4gY3JlYXRlU2NyaXB0TG9h
ZEV2ZW50KCkKIHsKICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2
ZW50LCBmYWxzZSwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuY3BwCmluZGV4IGMyNDU4ZDI1ZWE5NDgzZjRkODZhNjNjNTA4Njc2NWQ1ZjU2MzhlMTQu
LmE2YjFkYmI4ODQ0ZTczMTFjNTZhODRiODViMzhkMzc3MWIxMzYxMjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKQEAgLTE5MCw3ICsxOTAsNyBAQCB2b2lk
IFRleHRUcmFja0N1ZTo6aW52YWxpZGF0ZUN1ZUluZGV4KCkKICAgICBtX2N1ZUluZGV4ID0gaW52
YWxpZEN1ZUluZGV4OwogfQogCi1ib29sIFRleHRUcmFja0N1ZTo6ZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKK2Jvb2wgVGV4dFRyYWNrQ3VlOjpkaXNwYXRjaEV2ZW50KEV2
ZW50JiBldmVudCkKIHsKICAgICAvLyBXaGVuIGEgVGV4dFRyYWNrJ3MgbW9kZSBpcyBkaXNhYmxl
ZDogbm8gY3VlcyBhcmUgYWN0aXZlLCBubyBldmVudHMgZmlyZWQuCiAgICAgaWYgKCF0cmFjaygp
IHx8IHRyYWNrKCktPm1vZGUoKSA9PSBUZXh0VHJhY2s6OmRpc2FibGVkS2V5d29yZCgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgKaW5kZXggZWMyYWIyMmUyZjc2M2U4
NDA3ZmEzZDE4OWQ5NmRiYzBlOGQ2Y2I4Mi4uNjRlNmZkMjUwYmNmMWIzOTlkYzIzM2UzZjQxMjFl
ZGE4OGNhNWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCkBA
IC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGludmFsaWRhdGVDdWVJbmRleCgpOwog
CiAgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQ7Ci0gICAgdmlydHVhbCBib29s
IGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIGlzQWN0aXZl
KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldElzQWN0aXZlKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNzg0YjNhM2U0MGJkZjJhYTAyYTI1NWViOGVjZDI5OGNj
NTA0YTBlNC4uMWJhZTRhMjQwNTkxMjUxMGU4YzI3Mzk3MzI5M2EwOTQ0Y2EwMTI5NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0yODU5LDcgKzI4NTksNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpkaXNwYXRjaFVubG9hZEV2ZW50cyhVbmxvYWRFdmVudFBvbGljeSB1bmxv
YWRFdmVudFBvbGljeSkKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTY3NzAKIAogICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLmRvY3VtZW50
KCktPmluUGFnZUNhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RXZlbnQ+IHVubG9h
ZEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFs
c2UpKTsKKyAgICAgICAgICAgICAgICBSZWY8RXZlbnQ+IHVubG9hZEV2ZW50KEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKICAgICAgICAgICAg
ICAgICAvLyBUaGUgRG9jdW1lbnRMb2FkZXIgKGFuZCB0aHVzIGl0cyBEb2N1bWVudExvYWRUaW1p
bmcpIG1pZ2h0IGdldCBkZXN0cm95ZWQKICAgICAgICAgICAgICAgICAvLyB3aGlsZSBkaXNwYXRj
aGluZyB0aGUgZXZlbnQsIHNvIHByb3RlY3QgaXQgdG8gcHJldmVudCB3cml0aW5nIHRoZSBlbmQK
ICAgICAgICAgICAgICAgICAvLyB0aW1lIGludG8gZnJlZWQgbWVtb3J5LgpAQCAtMjkwNSwxOCAr
MjkwNSwxOCBAQCBib29sIEZyYW1lTG9hZGVyOjpkaXNwYXRjaEJlZm9yZVVubG9hZEV2ZW50KENo
cm9tZSYgY2hyb21lLCBGcmFtZUxvYWRlciogZnJhbWVMbwogICAgIGlmICghZG9jdW1lbnQtPmJv
ZHlPckZyYW1lc2V0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIFJlZlB0cjxC
ZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2FkRXZlbnQgPSBCZWZvcmVVbmxvYWRFdmVudDo6
Y3JlYXRlKCk7CisgICAgUmVmPEJlZm9yZVVubG9hZEV2ZW50PiBiZWZvcmVVbmxvYWRFdmVudCA9
IEJlZm9yZVVubG9hZEV2ZW50OjpjcmVhdGUoKTsKICAgICBtX3BhZ2VEaXNtaXNzYWxFdmVudEJl
aW5nRGlzcGF0Y2hlZCA9IFBhZ2VEaXNtaXNzYWxUeXBlOjpCZWZvcmVVbmxvYWQ7CiAKICAgICB7
CiAgICAgICAgIEZvcmJpZFByb21wdHNTY29wZSBmb3JiaWRQcm9tcHRzKG1fZnJhbWUucGFnZSgp
KTsKLSAgICAgICAgZG9tV2luZG93LT5kaXNwYXRjaEV2ZW50KGJlZm9yZVVubG9hZEV2ZW50Lmdl
dCgpLCBkb21XaW5kb3ctPmRvY3VtZW50KCkpOworICAgICAgICBkb21XaW5kb3ctPmRpc3BhdGNo
RXZlbnQoYmVmb3JlVW5sb2FkRXZlbnQsIGRvbVdpbmRvdy0+ZG9jdW1lbnQoKSk7CiAgICAgfQog
CiAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSBQYWdlRGlzbWlzc2Fs
VHlwZTo6Tm9uZTsKIAogICAgIGlmICghYmVmb3JlVW5sb2FkRXZlbnQtPmRlZmF1bHRQcmV2ZW50
ZWQoKSkKLSAgICAgICAgZG9jdW1lbnQtPmRlZmF1bHRFdmVudEhhbmRsZXIoYmVmb3JlVW5sb2Fk
RXZlbnQuZ2V0KCkpOworICAgICAgICBkb2N1bWVudC0+ZGVmYXVsdEV2ZW50SGFuZGxlcihiZWZv
cmVVbmxvYWRFdmVudC5wdHIoKSk7CiAgICAgaWYgKGJlZm9yZVVubG9hZEV2ZW50LT5yZXR1cm5W
YWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAKaW5k
ZXggOTg5MDk5NDBlMzQ0ZjNiMjg2YjIwY2I1MWFkMTIwODA2ZjIyM2QyMy4uODhlN2VlMmIyNTMx
ZGZmNzE3NjFmMmM1ZTcwY2U0ODJlODhiYTRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCkBAIC0zNTAsNyAr
MzUwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6ZGlzcGF0Y2hET01FdmVudChFdmVu
dElEIGlkLCBpbnQgdG90YWwsIGludCBkb25lKQogICAgICAgICAgICAgZXZlbnQgPSBQcm9ncmVz
c0V2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVlLCBkb25lLCB0b3RhbCk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGZhbHNlLCBm
YWxzZSk7Ci0gICAgICAgIG1fZG9tQXBwbGljYXRpb25DYWNoZS0+ZGlzcGF0Y2hFdmVudChldmVu
dCwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIG1fZG9tQXBwbGljYXRpb25DYWNoZS0+
ZGlzcGF0Y2hFdmVudCgqZXZlbnQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCmluZGV4IDFlZmFlYjQxYTc4ZjJlY2E5ODg1M2Y3NzIxZDllOGU1Zjk0NWU4NTkuLmY4OWUx
OTQ2ODg5NGYzNTMwMmRkNTVjZjA0ZTMxYzBlNmMyYTk2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAg
IFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQorICAgIFJlZjxNZXNzYWdlRXZlbnQ+IGV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRB
cnJheT4gbWVzc2FnZVBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKmNvbnRleHQs
IFdURjo6bW92ZShtX2NoYW5uZWxzKSk7CiAgICAgICAgIHJldHVybiBNZXNzYWdlRXZlbnQ6OmNy
ZWF0ZShXVEY6Om1vdmUobWVzc2FnZVBvcnRzKSwgbV9tZXNzYWdlLCBtX29yaWdpbiwgU3RyaW5n
KCksIG1fc291cmNlKTsKQEAgLTkyOCw3ICs5MjgsNyBAQCB2b2lkIERPTVdpbmRvdzo6cG9zdE1l
c3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNzYWdlVGltZXImIHRpbWVyKQogICAgIGRpc3BhdGNoTWVz
c2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKHRpbWVyLnRhcmdldE9yaWdpbigpLCB0aW1lci5ldmVu
dChkb2N1bWVudCgpKSwgdGltZXIuc3RhY2tUcmFjZSgpKTsKIH0KIAotdm9pZCBET01XaW5kb3c6
OmRpc3BhdGNoTWVzc2FnZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3VyaXR5T3JpZ2luKiBpbnRl
bmRlZFRhcmdldE9yaWdpbiwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFBhc3NSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlKQordm9pZCBET01XaW5kb3c6OmRpc3BhdGNoTWVzc2Fn
ZUV2ZW50V2l0aE9yaWdpbkNoZWNrKFNlY3VyaXR5T3JpZ2luKiBpbnRlbmRlZFRhcmdldE9yaWdp
biwgRXZlbnQmIGV2ZW50LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gc3RhY2tUcmFjZSkK
IHsKICAgICBpZiAoaW50ZW5kZWRUYXJnZXRPcmlnaW4pIHsKICAgICAgICAgLy8gQ2hlY2sgdGFy
Z2V0IG9yaWdpbiBub3cgc2luY2UgdGhlIHRhcmdldCBkb2N1bWVudCBtYXkgaGF2ZSBjaGFuZ2Vk
IHNpbmNlIHRoZSB0aW1lciB3YXMgc2NoZWR1bGVkLgpAQCAtMTg3MCw3ICsxODcwLDcgQEAgYm9v
bCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEV2ZW50TGlzdGVuZXIKIAogdm9pZCBET01XaW5kb3c6OmRpc3BhdGNoTG9hZEV2ZW50
KCkKIHsKLSAgICBSZWZQdHI8RXZlbnQ+IGxvYWRFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworICAgIFJlZjxFdmVudD4gbG9hZEV2ZW50
ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwog
ICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkgJiYg
IW1fZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnRpbWluZygpLmxvYWRFdmVudFN0
YXJ0KCkpIHsKICAgICAgICAgLy8gVGhlIERvY3VtZW50TG9hZGVyIChhbmQgdGh1cyBpdHMgRG9j
dW1lbnRMb2FkVGltaW5nKSBtaWdodCBnZXQgZGVzdHJveWVkIHdoaWxlIGRpc3BhdGNoaW5nCiAg
ICAgICAgIC8vIHRoZSBldmVudCwgc28gcHJvdGVjdCBpdCB0byBwcmV2ZW50IHdyaXRpbmcgdGhl
IGVuZCB0aW1lIGludG8gZnJlZWQgbWVtb3J5LgpAQCAtMTg5MiwzNCArMTg5MiwzMyBAQCB2b2lk
IERPTVdpbmRvdzo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQogICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6bG9hZEV2ZW50RmlyZWQoZnJhbWUoKSk7CiB9CiAKLWJvb2wgRE9NV2luZG93OjpkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBycEV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFy
Z2V0PiBwcnBUYXJnZXQpCitib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZl
bnQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCiB7CiAgICAgUmVmPEV2ZW50VGFyZ2V0PiBwcm90ZWN0
KCp0aGlzKTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CiAKICAgICAvLyBQ
YXVzaW5nIGEgcGFnZSBtYXkgdHJpZ2dlciBwYWdlaGlkZSBhbmQgcGFnZXNob3cgZXZlbnRzLiBX
ZWJDb3JlIGFsc28gaW1wbGljaXRseSBmaXJlcyB0aGVzZQogICAgIC8vIGV2ZW50cyB3aGVuIGNs
b3NpbmcgYSBXZWJWaWV3LiBIZXJlIHdlIGtlZXAgdHJhY2sgb2YgdGhlIHN0YXRlIG9mIHRoZSBw
YWdlIHRvIHByZXZlbnQgZHVwbGljYXRlLAogICAgIC8vIHVuYmFsYW5jZWQgZXZlbnRzIHBlciB0
aGUgZGVmaW5pdGlvbiBvZiB0aGUgcGFnZXNob3cgZXZlbnQ6CiAgICAgLy8gPGh0dHA6Ly93d3cu
d2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2hpc3Rvcnku
aHRtbCNldmVudC1wYWdlc2hvdz4uCi0gICAgaWYgKGV2ZW50LT5ldmVudEludGVyZmFjZSgpID09
IFBhZ2VUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2VUeXBlKSB7Ci0gICAgICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wYWdlc2hvd0V2ZW50KSB7CisgICAgaWYgKGV2ZW50LmV2
ZW50SW50ZXJmYWNlKCkgPT0gUGFnZVRyYW5zaXRpb25FdmVudEludGVyZmFjZVR5cGUpIHsKKyAg
ICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZXNob3dFdmVudCkgewog
ICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFnZVN0YXR1c1Nob3duKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBFdmVudCB3YXMgcHJldmlvdXNseSBkaXNwYXRj
aGVkOyBkbyBub3QgZmlyZSBhIGR1cGxpY2F0ZSBldmVudC4KICAgICAgICAgICAgIG1fbGFzdFBh
Z2VTdGF0dXMgPSBQYWdlU3RhdHVzU2hvd247Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCkgeworICAgICAgICB9IGVsc2UgaWYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCkgewogICAgICAgICAg
ICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFnZVN0YXR1c0hpZGRlbikKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsgLy8gRXZlbnQgd2FzIHByZXZpb3VzbHkgZGlzcGF0Y2hlZDsgZG8g
bm90IGZpcmUgYSBkdXBsaWNhdGUgZXZlbnQuCiAgICAgICAgICAgICBtX2xhc3RQYWdlU3RhdHVz
ID0gUGFnZVN0YXR1c0hpZGRlbjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGV2ZW50LT5zZXRU
YXJnZXQocHJwVGFyZ2V0ID8gcHJwVGFyZ2V0IDogdGhpcyk7Ci0gICAgZXZlbnQtPnNldEN1cnJl
bnRUYXJnZXQodGhpcyk7Ci0gICAgZXZlbnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdF
VCk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KHRhcmdldCA/IHRhcmdldCA6IHRoaXMpOworICAgIGV2
ZW50LnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgZXZlbnQuc2V0RXZlbnRQaGFzZShFdmVu
dDo6QVRfVEFSR0VUKTsKIAotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29r
aWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50T25XaW5kb3co
ZnJhbWUoKSwgKmV2ZW50LCAqdGhpcyk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZlbnRP
bldpbmRvdyhmcmFtZSgpLCBldmVudCwgKnRoaXMpOwogCi0gICAgYm9vbCByZXN1bHQgPSBmaXJl
RXZlbnRMaXN0ZW5lcnMoZXZlbnQuZ2V0KCkpOworICAgIGJvb2wgcmVzdWx0ID0gZmlyZUV2ZW50
TGlzdGVuZXJzKGV2ZW50KTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlz
cGF0Y2hFdmVudE9uV2luZG93KGNvb2tpZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4
IDBkOGQ5NTM1YWI3NDNkOTI5Njc1YTViYzQwYjE0NDI4YjhjNTI3ZWQuLmI1MDAxYmNmMWI3MDZm
ZTcwZWI0OGY0YTc4NzFlNzI2YjJiYTFhNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAt
MjQ0LDcgKzI0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gTmVlZGVkIGZv
ciBPYmplY3RpdmUtQyBiaW5kaW5ncyAoc2VlIGJ1ZyAyODc3NCkuCiAgICAgICAgIHZvaWQgcG9z
dE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIE1lc3Nh
Z2VQb3J0KiwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyYgc291cmNlLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RN
ZXNzYWdlVGltZXImKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhPcmln
aW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5kZWRUYXJnZXRPcmlnaW4sIFBhc3NSZWZQdHI8
RXZlbnQ+LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6U2NyaXB0Q2FsbFN0YWNrPik7CisgICAgICAg
IHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnRXaXRoT3JpZ2luQ2hlY2soU2VjdXJpdHlPcmlnaW4q
IGludGVuZGVkVGFyZ2V0T3JpZ2luLCBFdmVudCYsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpTY3Jp
cHRDYWxsU3RhY2s+KTsKIAogICAgICAgICB2b2lkIHNjcm9sbEJ5KGludCB4LCBpbnQgeSkgY29u
c3Q7CiAgICAgICAgIHZvaWQgc2Nyb2xsVG8oaW50IHgsIGludCB5KSBjb25zdDsKQEAgLTI3OCw3
ICsyNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVBbGxFdmVudExpc3RlbmVycygpIG92ZXJyaWRlOwogCiAgICAgICAgIHVzaW5nIEV2ZW50VGFy
Z2V0OjpkaXNwYXRjaEV2ZW50OwotICAgICAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4gcHJwRXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFRhcmdldCk7Cisg
ICAgICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYsIEV2ZW50VGFyZ2V0Kik7CiAKICAgICAg
ICAgdm9pZCBkaXNwYXRjaExvYWRFdmVudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VD
b250cm9sbGVyLmNwcAppbmRleCA5MjU3NTRlYzQzNjEwZTdhN2Y2OTliNjg0ODE1MmU3MmM4NWFm
NjIxLi4zYzM4NDMwOTU2MzQ5NjIyYWUyZTE5ZmQ1Yjc2MDM4NWM5NTkwNGNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RldmljZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5jcHAKQEAgLTcxLDkgKzcxLDggQEAgdm9pZCBE
ZXZpY2VDb250cm9sbGVyOjpyZW1vdmVBbGxEZXZpY2VFdmVudExpc3RlbmVycyhET01XaW5kb3cq
IHdpbmRvdykKICAgICAgICAgbV9jbGllbnQtPnN0b3BVcGRhdGluZygpOwogfQogCi12b2lkIERl
dmljZUNvbnRyb2xsZXI6OmRpc3BhdGNoRGV2aWNlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJw
RXZlbnQpCit2b2lkIERldmljZUNvbnRyb2xsZXI6OmRpc3BhdGNoRGV2aWNlRXZlbnQoRXZlbnQm
IGV2ZW50KQogewotICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKICAgICBWZWN0
b3I8UmVmUHRyPERPTVdpbmRvdz4+IGxpc3RlbmVyVmVjdG9yOwogICAgIGNvcHlUb1ZlY3Rvciht
X2xpc3RlbmVycywgbGlzdGVuZXJWZWN0b3IpOwogICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBs
aXN0ZW5lclZlY3RvcikgewpAQCAtOTMsOCArOTIsMTAgQEAgdm9pZCBEZXZpY2VDb250cm9sbGVy
OjpmaXJlRGV2aWNlRXZlbnQoKQogICAgIG1fbGFzdEV2ZW50TGlzdGVuZXJzLmNsZWFyKCk7CiAg
ICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IGxpc3RlbmVyVmVjdG9yKSB7CiAgICAgICAgIGF1dG8g
ZG9jdW1lbnQgPSBsaXN0ZW5lci0+ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKGRvY3VtZW50ICYm
ICFkb2N1bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpICYmICFkb2N1bWVudC0+
YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKLSAgICAgICAgICAgIGxpc3RlbmVyLT5kaXNw
YXRjaEV2ZW50KGdldExhc3RFdmVudCgpKTsKKyAgICAgICAgaWYgKGRvY3VtZW50ICYmICFkb2N1
bWVudC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpICYmICFkb2N1bWVudC0+YWN0aXZl
RE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbGFzdEV2ZW50
ID0gZ2V0TGFzdEV2ZW50KCkpCisgICAgICAgICAgICAgICAgbGlzdGVuZXItPmRpc3BhdGNoRXZl
bnQoKmxhc3RFdmVudCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRGV2aWNlQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
ZXZpY2VDb250cm9sbGVyLmgKaW5kZXggZmRmNWQxZDk2ZDE1Nzc2NzZjYTkwOWY5MTg5M2M1N2Y5
ODA4YTVjZi4uMjE4NjFmMjRlNWU0MzhlNzAwMmQ3OWYxMjNlNjhiY2I5YmEwODg0ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9EZXZpY2VDb250cm9sbGVyLmgKQEAgLTQ4LDEyICs0OCwxMiBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVEZXZpY2VFdmVudExpc3RlbmVyKERPTVdpbmRvdyopOwogICAg
IHZvaWQgcmVtb3ZlQWxsRGV2aWNlRXZlbnRMaXN0ZW5lcnMoRE9NV2luZG93Kik7CiAKLSAgICB2
b2lkIGRpc3BhdGNoRGV2aWNlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQgZGlz
cGF0Y2hEZXZpY2VFdmVudChFdmVudCYpOwogICAgIGJvb2wgaXNBY3RpdmUoKSB7IHJldHVybiAh
bV9saXN0ZW5lcnMuaXNFbXB0eSgpOyB9CiAgICAgRGV2aWNlQ2xpZW50KiBjbGllbnQoKSB7IHJl
dHVybiBtX2NsaWVudDsgfQogCiAgICAgdmlydHVhbCBib29sIGhhc0xhc3REYXRhKCkgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RXZlbnQ+IGdldExhc3RFdmVudCgp
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxFdmVudD4gZ2V0TGFzdEV2ZW50KCkg
eyByZXR1cm4gbnVsbHB0cjsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaXJlRGV2aWNlRXZl
bnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggMDUwYjYyODk1
YWVhNzM2NDlkMmFlNDY0ZTU5ZmM2ODNmMWE2YjlkMC4uZGFhMGY5OGY5YzBhMjU2NmUxMDg5ZTUw
ZDlkZDU2MGI4ZWRmNzdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAK
QEAgLTQ0Niw3ICs0NDYsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpkaXNwYXRjaFRleHRJbnB1
dEV2ZW50Rm9yKEZyYW1lKiBpbm5lckZyYW1lLCBEcmFnRGF0YSYgZHJhZwogICAgIEFTU0VSVCht
X3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmhhc0NhcmV0KCkpOwogICAgIFN0cmluZyB0ZXh0
ID0gbV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgp
ID8gZW1wdHlTdHJpbmcoKSA6IGRyYWdEYXRhLmFzUGxhaW5UZXh0KCk7CiAgICAgTm9kZSogdGFy
Z2V0ID0gaW5uZXJGcmFtZS0+ZWRpdG9yKCkuZmluZEV2ZW50VGFyZ2V0RnJvbShtX3BhZ2UuZHJh
Z0NhcmV0Q29udHJvbGxlcigpLmNhcmV0UG9zaXRpb24oKSk7Ci0gICAgcmV0dXJuIHRhcmdldC0+
ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3AoaW5uZXJGcmFtZS0+ZG9jdW1l
bnQoKS0+ZG9tV2luZG93KCksIHRleHQpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICByZXR1cm4g
dGFyZ2V0LT5kaXNwYXRjaEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yRHJvcChpbm5lckZyYW1l
LT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCkpOwogfQogCiBib29sIERyYWdDb250cm9s
bGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRhJiBkcmFnRGF0YSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAppbmRleCA2NzBlMTM1ZjNkMzRmZDMzNjZkMzg4YTZlOTAwNmM3NWMx
ZWQ0ZmEzLi5iZjhmYmE3NTYxMGJjYzE1M2YzNjBiMmJjY2VjODcyYWNlMTYyNDFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMDEyLDEzICszMDEyLDEzIEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGluaXRp
YWxLZXlFdmVudCkKICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQga2V5RG93bkV2ZW50ID0gaW5p
dGlhbEtleUV2ZW50OyAgICAKICAgICBpZiAoa2V5RG93bkV2ZW50LnR5cGUoKSAhPSBQbGF0Zm9y
bUV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICBrZXlEb3duRXZlbnQuZGlzYW1iaWd1YXRlS2V5
RG93bkV2ZW50KFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24sIGJhY2t3YXJkQ29tcGF0aWJpbGl0
eU1vZGUpOwotICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBrZXlkb3duID0gS2V5Ym9hcmRFdmVu
dDo6Y3JlYXRlKGtleURvd25FdmVudCwgbV9mcmFtZS5kb2N1bWVudCgpLT5kZWZhdWx0Vmlldygp
KTsKKyAgICBSZWY8S2V5Ym9hcmRFdmVudD4ga2V5ZG93biA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0
ZShrZXlEb3duRXZlbnQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7CiAgICAg
aWYgKG1hdGNoZWRBbkFjY2Vzc0tleSkKICAgICAgICAga2V5ZG93bi0+c2V0RGVmYXVsdFByZXZl
bnRlZCh0cnVlKTsKICAgICBrZXlkb3duLT5zZXRUYXJnZXQoZWxlbWVudCk7CiAKICAgICBpZiAo
aW5pdGlhbEtleUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKSB7Ci0g
ICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93biwgSUdOT1JFX0VYQ0VQVElPTik7
CisgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoa2V5ZG93bik7CiAgICAgICAgIC8vIElm
IGZyYW1lIGNoYW5nZWQgYXMgYSByZXN1bHQgb2Yga2V5ZG93biBkaXNwYXRjaCwgdGhlbiByZXR1
cm4gdHJ1ZSB0byBhdm9pZCBzZW5kaW5nIGEgc3Vic2VxdWVudCBrZXlwcmVzcyBtZXNzYWdlIHRv
IHRoZSBuZXcgZnJhbWUuCiAgICAgICAgIGJvb2wgY2hhbmdlZEZvY3VzZWRGcmFtZSA9IG1fZnJh
bWUucGFnZSgpICYmICZtX2ZyYW1lICE9ICZtX2ZyYW1lLnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgICAgIHJldHVybiBrZXlkb3duLT5kZWZhdWx0
SGFuZGxlZCgpIHx8IGtleWRvd24tPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBjaGFuZ2VkRm9jdXNl
ZEZyYW1lOwpAQCAtMzAyOSw3ICszMDI5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50
KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgaW5pdGlhbEtleUV2ZW50KQogICAgIC8vIGlu
IG9yZGVyIHRvIG1hdGNoIElFOgogICAgIC8vIDEuIHByZXZlbnRpbmcgZGVmYXVsdCBoYW5kbGlu
ZyBvZiBrZXlkb3duIGFuZCBrZXlwcmVzcyBldmVudHMgaGFzIG5vIGVmZmVjdCBvbiBJTSBpbnB1
dDsKICAgICAvLyAyLiBpZiBhbiBpbnB1dCBtZXRob2QgaGFuZGxlcyB0aGUgZXZlbnQsIGl0cyBr
ZXlDb2RlIGlzIHNldCB0byAyMjkgaW4ga2V5ZG93biBldmVudC4KLSAgICBtX2ZyYW1lLmVkaXRv
cigpLmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihrZXlkb3duLmdldCgpKTsKKyAgICBtX2ZyYW1l
LmVkaXRvcigpLmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihrZXlkb3duLnB0cigpKTsKICAgICAK
ICAgICBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kID0ga2V5ZG93bi0+ZGVmYXVsdEhhbmRsZWQo
KTsKICAgICAKQEAgLTMwNDAsMTAgKzMwNDAsMTAgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2
ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgaW5pdGlhbEtleUV2ZW50KQogICAgICAg
ICBrZXlkb3duLT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KICAgICAKLSAgICBpZiAoYWNj
ZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihrZXlkb3duLmdldCgpKSkKKyAgICBp
ZiAoYWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihrZXlkb3duKSkKICAgICAg
ICAga2V5ZG93bi0+c3RvcFByb3BhZ2F0aW9uKCk7CiAKLSAgICBlbGVtZW50LT5kaXNwYXRjaEV2
ZW50KGtleWRvd24sIElHTk9SRV9FWENFUFRJT04pOworICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZl
bnQoa2V5ZG93bik7CiAgICAgLy8gSWYgZnJhbWUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiBrZXlk
b3duIGRpc3BhdGNoLCB0aGVuIHJldHVybiBlYXJseSB0byBhdm9pZCBzZW5kaW5nIGEgc3Vic2Vx
dWVudCBrZXlwcmVzcyBtZXNzYWdlIHRvIHRoZSBuZXcgZnJhbWUuCiAgICAgYm9vbCBjaGFuZ2Vk
Rm9jdXNlZEZyYW1lID0gbV9mcmFtZS5wYWdlKCkgJiYgJm1fZnJhbWUgIT0gJm1fZnJhbWUucGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBib29sIGtl
eWRvd25SZXN1bHQgPSBrZXlkb3duLT5kZWZhdWx0SGFuZGxlZCgpIHx8IGtleWRvd24tPmRlZmF1
bHRQcmV2ZW50ZWQoKSB8fCBjaGFuZ2VkRm9jdXNlZEZyYW1lOwpAQCAtMzA2MiwxNCArMzA2Miwx
NCBAQCBib29sIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2
ZW50JiBpbml0aWFsS2V5RXZlbnQpCiAgICAga2V5UHJlc3NFdmVudC5kaXNhbWJpZ3VhdGVLZXlE
b3duRXZlbnQoUGxhdGZvcm1FdmVudDo6Q2hhciwgYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSk7
CiAgICAgaWYgKGtleVByZXNzRXZlbnQudGV4dCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGtleWRvd25SZXN1bHQ7Ci0gICAgUmVmUHRyPEtleWJvYXJkRXZlbnQ+IGtleXByZXNzID0gS2V5
Ym9hcmRFdmVudDo6Y3JlYXRlKGtleVByZXNzRXZlbnQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+ZGVm
YXVsdFZpZXcoKSk7CisgICAgUmVmPEtleWJvYXJkRXZlbnQ+IGtleXByZXNzID0gS2V5Ym9hcmRF
dmVudDo6Y3JlYXRlKGtleVByZXNzRXZlbnQsIG1fZnJhbWUuZG9jdW1lbnQoKS0+ZGVmYXVsdFZp
ZXcoKSk7CiAgICAga2V5cHJlc3MtPnNldFRhcmdldChlbGVtZW50KTsKICAgICBpZiAoa2V5ZG93
blJlc3VsdCkKICAgICAgICAga2V5cHJlc3MtPnNldERlZmF1bHRQcmV2ZW50ZWQodHJ1ZSk7CiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAga2V5cHJlc3MtPmtleXByZXNzQ29tbWFuZHMoKSA9IGtl
eWRvd24tPmtleXByZXNzQ29tbWFuZHMoKTsKICNlbmRpZgotICAgIGVsZW1lbnQtPmRpc3BhdGNo
RXZlbnQoa2V5cHJlc3MsIElHTk9SRV9FWENFUFRJT04pOworICAgIGVsZW1lbnQtPmRpc3BhdGNo
RXZlbnQoa2V5cHJlc3MpOwogCiAgICAgcmV0dXJuIGtleWRvd25SZXN1bHQgfHwga2V5cHJlc3Mt
PmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBrZXlwcmVzcy0+ZGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAg
LTMxODYsNyArMzE4Niw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlib2FyZFNlbGVj
dGlvbk1vdmVtZW50Rm9yQWNjZXNzaWJpbGl0eShLZXlib2FyZEV2ZW50CiAgICAgfQogfQogCi1i
b29sIEV2ZW50SGFuZGxlcjo6YWNjZXNzaWJpbGl0eVByZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihL
ZXlib2FyZEV2ZW50KiBldmVudCkKK2Jvb2wgRXZlbnRIYW5kbGVyOjphY2Nlc3NpYmlsaXR5UHJl
dmVudHNFdmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuaGFuY2Vk
VXNlckludGVyZmFjZUVuYWJsZWQoKSkKQEAgLTMxOTYsOSArMzE5Niw5IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjphY2Nlc3NpYmlsaXR5UHJldmVudHNFdmVudFByb3BvZ2F0aW9uKEtleWJvYXJkRXZl
bnQqIGV2ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDaGVjayBmb3Iga2V5
IGV2ZW50cyB0aGF0IGFyZSByZWxldmFudCB0byBhY2Nlc3NpYmlsaXR5OiB0YWIgYW5kIGFycm93
cyBrZXlzIHRoYXQgY2hhbmdlIGZvY3VzCi0gICAgaWYgKGV2ZW50LT5rZXlJZGVudGlmaWVyKCkg
PT0gIlUrMDAwOSIpCisgICAgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDA5IikK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gZm9j
dXNEaXJlY3Rpb25Gb3JLZXkoZXZlbnQtPmtleUlkZW50aWZpZXIoKSk7CisgICAgRm9jdXNEaXJl
Y3Rpb24gZGlyZWN0aW9uID0gZm9jdXNEaXJlY3Rpb25Gb3JLZXkoZXZlbnQua2V5SWRlbnRpZmll
cigpKTsKICAgICBpZiAoZGlyZWN0aW9uICE9IEZvY3VzRGlyZWN0aW9uTm9uZSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAjZWxzZQpAQCAtMzQ5NCwxMCArMzQ5NCwxMCBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6aGFuZGxlVGV4dElucHV0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCogdW5k
ZXJseWluZ0V2ZQogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKICAg
ICAgICAgdmlldy0+ZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRl
cmFjdGlvbigpOwogCi0gICAgUmVmUHRyPFRleHRFdmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNy
ZWF0ZShtX2ZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0LCBpbnB1dFR5cGUpOwor
ICAgIFJlZjxUZXh0RXZlbnQ+IGV2ZW50ID0gVGV4dEV2ZW50OjpjcmVhdGUobV9mcmFtZS5kb2N1
bWVudCgpLT5kb21XaW5kb3coKSwgdGV4dCwgaW5wdXRUeXBlKTsKICAgICBldmVudC0+c2V0VW5k
ZXJseWluZ0V2ZW50KHVuZGVybHlpbmdFdmVudCk7CiAKLSAgICB0YXJnZXQtPmRpc3BhdGNoRXZl
bnQoZXZlbnQsIElHTk9SRV9FWENFUFRJT04pOworICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChl
dmVudCk7CiAgICAgcmV0dXJuIGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwogfQogICAgIApAQCAt
Mzg5OSwxMSArMzg5OSwxMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChj
b25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICAgICAgUmVmUHRyPFRvdWNo
TGlzdD4gdGFyZ2V0VG91Y2hlcyhpc1RvdWNoQ2FuY2VsRXZlbnQgPyBlbXB0eUxpc3QgOiB0b3Vj
aGVzQnlUYXJnZXQuZ2V0KHRvdWNoRXZlbnRUYXJnZXQpKTsKICAgICAgICAgICAgIEFTU0VSVCh0
YXJnZXRUb3VjaGVzKTsKIAotICAgICAgICAgICAgUmVmUHRyPFRvdWNoRXZlbnQ+IHRvdWNoRXZl
bnQgPQorICAgICAgICAgICAgUmVmPFRvdWNoRXZlbnQ+IHRvdWNoRXZlbnQgPQogICAgICAgICAg
ICAgICAgIFRvdWNoRXZlbnQ6OmNyZWF0ZShlZmZlY3RpdmVUb3VjaGVzLmdldCgpLCB0YXJnZXRU
b3VjaGVzLmdldCgpLCBjaGFuZ2VkVG91Y2hlc1tzdGF0ZV0ubV90b3VjaGVzLmdldCgpLAogICAg
ICAgICAgICAgICAgICAgICBzdGF0ZU5hbWUsIHRvdWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5k
b2N1bWVudCgpLmRlZmF1bHRWaWV3KCksCiAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAs
IGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5KCksIGV2ZW50LnNoaWZ0S2V5KCksIGV2ZW50
Lm1ldGFLZXkoKSk7Ci0gICAgICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZGlz
cGF0Y2hUb3VjaEV2ZW50KHRvdWNoRXZlbnQuZ2V0KCkpOworICAgICAgICAgICAgdG91Y2hFdmVu
dFRhcmdldC0+dG9Ob2RlKCktPmRpc3BhdGNoVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKICAgICAg
ICAgICAgIHN3YWxsb3dlZEV2ZW50ID0gc3dhbGxvd2VkRXZlbnQgfHwgdG91Y2hFdmVudC0+ZGVm
YXVsdFByZXZlbnRlZCgpIHx8IHRvdWNoRXZlbnQtPmRlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAg
IH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCAzZDU3NTg4NGE5YmE4
NjA3YTc5YTdmZDQ3Yzc2ZDE3NDMyM2I5Mzg3Li4yNDM1ZGEwMTUxMTgzYWU2ZDNmYWE5OWRlNDk3
NjcxNTczYTkzYzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTI0Nyw3ICsy
NDcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBrZXlFdmVudChjb25zdCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQmKTsKICAgICB2b2lkIGRlZmF1bHRLZXlib2FyZEV2ZW50SGFu
ZGxlcihLZXlib2FyZEV2ZW50Kik7CiAKLSAgICBib29sIGFjY2Vzc2liaWxpdHlQcmV2ZW50c0V2
ZW50UHJvcG9nYXRpb24oS2V5Ym9hcmRFdmVudCopOworICAgIGJvb2wgYWNjZXNzaWJpbGl0eVBy
ZXZlbnRzRXZlbnRQcm9wb2dhdGlvbihLZXlib2FyZEV2ZW50Jik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50Rm9yQWNjZXNzaWJpbGl0eShL
ZXlib2FyZEV2ZW50Kik7CiAKICAgICBib29sIGhhbmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0
cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCA9IG51bGxwdHIsIFRleHRFdmVudElu
cHV0VHlwZSA9IFRleHRFdmVudElucHV0S2V5Ym9hcmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291
cmNlLmNwcAppbmRleCA5ZjkwYjAxYjE1ODU0MDhmNjYwZDdiMWQwMGVjOTZmYzgxMmZhZGI3Li40
YTEwMTUxMmQ2ODY2Mzg4NjAwZWQ3MzJmYzNjYTg0MTZmN2E0MGJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50U291cmNlLmNwcApAQCAtNDEwLDExICs0MTAsMTEgQEAgYm9vbCBFdmVudFNvdXJjZTo6
Y2FuU3VzcGVuZEZvclBhZ2VDYWNoZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Q
YXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gRXZlbnRTb3VyY2U6OmNyZWF0ZU1lc3NhZ2VFdmVudCgp
CitSZWY8TWVzc2FnZUV2ZW50PiBFdmVudFNvdXJjZTo6Y3JlYXRlTWVzc2FnZUV2ZW50KCkKIHsK
LSAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVudCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKCk7
CisgICAgUmVmPE1lc3NhZ2VFdmVudD4gZXZlbnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOwog
ICAgIGV2ZW50LT5pbml0TWVzc2FnZUV2ZW50KG1fZXZlbnROYW1lLmlzRW1wdHkoKSA/IGV2ZW50
TmFtZXMoKS5tZXNzYWdlRXZlbnQgOiBBdG9taWNTdHJpbmcobV9ldmVudE5hbWUpLCBmYWxzZSwg
ZmFsc2UsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFN0cmluZzo6YWRvcHQobV9kYXRh
KSksIG1fZXZlbnRTdHJlYW1PcmlnaW4sIG1fbGFzdEV2ZW50SWQsIDAsIDApOwotICAgIHJldHVy
biBldmVudC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGV2ZW50OwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKaW5kZXggZTQ5ZDY4ZTIzN2ZiOTll
NjEwZTZkNmM3ZTM2YWM5ZDNhNGMyOGM2Yy4uMWQyNTQ1OGVlM2QwYmZhZGIxMjNiMDFiZjZmOWZl
ZGUwMjQzZGU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaApAQCAtOTksNyArOTksNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgYWJvcnRDb25uZWN0aW9uQXR0ZW1wdCgpOwogICAgIHZvaWQg
cGFyc2VFdmVudFN0cmVhbSgpOwogICAgIHZvaWQgcGFyc2VFdmVudFN0cmVhbUxpbmUodW5zaWdu
ZWQgcG9zLCBpbnQgZmllbGRMZW5ndGgsIGludCBsaW5lTGVuZ3RoKTsKLSAgICBQYXNzUmVmUHRy
PE1lc3NhZ2VFdmVudD4gY3JlYXRlTWVzc2FnZUV2ZW50KCk7CisgICAgUmVmPE1lc3NhZ2VFdmVu
dD4gY3JlYXRlTWVzc2FnZUV2ZW50KCk7CiAKICAgICBVUkwgbV91cmw7CiAgICAgYm9vbCBtX3dp
dGhDcmVkZW50aWFsczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCAxZTdmZWQ3MDE3
YWEyYjlkMjAxY2FkMDAxNzFjOTA2ODVjNTNkYzg0Li4zMWFjMzFlMDJlYTIyNTlmOGUyODY3ZGE3
Y2Y3NWRlN2YxNDNkOGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0zMTg0LDE0
ICszMTg0LDE0IEBAIHZvaWQgRnJhbWVWaWV3OjpzZW5kUmVzaXplRXZlbnRJZk5lZWRlZCgpCiAg
ICAgYm9vbCBpc01haW5GcmFtZSA9IGZyYW1lKCkuaXNNYWluRnJhbWUoKTsKICAgICBib29sIGNh
blNlbmRSZXNpemVFdmVudFN5bmNocm9ub3VzbHkgPSBpc01haW5GcmFtZSAmJiAhbV9zaG91bGRB
dXRvU2l6ZTsKIAotICAgIFJlZlB0cjxFdmVudD4gcmVzaXplRXZlbnQgPSBFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICBSZWY8RXZlbnQ+
IHJlc2l6ZUV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVzaXplRXZlbnQsIGZh
bHNlLCBmYWxzZSk7CiAgICAgaWYgKGNhblNlbmRSZXNpemVFdmVudFN5bmNocm9ub3VzbHkpCi0g
ICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChyZXNpemVFdmVu
dC5yZWxlYXNlKCkpOworICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93
RXZlbnQocmVzaXplRXZlbnQpOwogICAgIGVsc2UgewogICAgICAgICAvLyBGSVhNRTogUXVldWVp
bmcgdGhpcyBldmVudCBmb3IgYW4gdW5wcmVkaWN0YWJsZSB0aW1lIGluIHRoZSBmdXR1cmUgc2Vl
bXMKICAgICAgICAgLy8gaW50cmluc2ljYWxseSByYWN5LiBCeSB0aGUgdGltZSB0aGlzIHJlc2l6
ZSBldmVudCBmaXJlcywgdGhlIGZyYW1lIG1pZ2h0CiAgICAgICAgIC8vIGJlIHJlc2l6ZWQgYWdh
aW4sIHNvIHdlIGNvdWxkIGVuZCB1cCB3aXRoIHR3byByZXNpemUgZXZlbnRzIGZvciB0aGUgc2Ft
ZSBzaXplLgotICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVudChy
ZXNpemVFdmVudC5yZWxlYXNlKCkpOworICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPmVucXVl
dWVXaW5kb3dFdmVudChXVEY6Om1vdmUocmVzaXplRXZlbnQpKTsKICAgICB9CiAKICAgICBpZiAo
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYXNGcm9udGVuZHMoKSAmJiBpc01haW5GcmFtZSkg
ewpAQCAtMzM3NywxMSArMzM3NywxMSBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlT3ZlcmZsb3dT
dGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZgogICAgICAg
ICBtX2hvcml6b250YWxPdmVyZmxvdyA9IGhvcml6b250YWxPdmVyZmxvdzsKICAgICAgICAgbV92
ZXJ0aWNhbE92ZXJmbG93ID0gdmVydGljYWxPdmVyZmxvdzsKIAotICAgICAgICBSZWZQdHI8T3Zl
cmZsb3dFdmVudD4gb3ZlcmZsb3dFdmVudCA9IE92ZXJmbG93RXZlbnQ6OmNyZWF0ZShob3Jpem9u
dGFsT3ZlcmZsb3dDaGFuZ2VkLCBob3Jpem9udGFsT3ZlcmZsb3csCisgICAgICAgIFJlZjxPdmVy
Zmxvd0V2ZW50PiBvdmVyZmxvd0V2ZW50ID0gT3ZlcmZsb3dFdmVudDo6Y3JlYXRlKGhvcml6b250
YWxPdmVyZmxvd0NoYW5nZWQsIGhvcml6b250YWxPdmVyZmxvdywKICAgICAgICAgICAgIHZlcnRp
Y2FsT3ZlcmZsb3dDaGFuZ2VkLCB2ZXJ0aWNhbE92ZXJmbG93KTsKICAgICAgICAgb3ZlcmZsb3dF
dmVudC0+c2V0VGFyZ2V0KHZpZXdwb3J0UmVuZGVyZXItPmVsZW1lbnQoKSk7CiAKLSAgICAgICAg
ZnJhbWUoKS5kb2N1bWVudCgpLT5lbnF1ZXVlT3ZlcmZsb3dFdmVudChvdmVyZmxvd0V2ZW50LnJl
bGVhc2UoKSk7CisgICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+ZW5xdWV1ZU92ZXJmbG93RXZl
bnQoV1RGOjptb3ZlKG92ZXJmbG93RXZlbnQpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDkzYzcwNmMwNzA0NWJiNmJiOWU1NGM4OTVj
NjVkMDM2OTYxZjVkZDYuLmM2MWNjOGI2N2QzMmViM2YyNDZjYmY1ZjEwY2E5Yzk3NmZmOGQ3MjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMTY5LDkgKzE2
OSw5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFob3Jpem9udGFsTGF5b3V0T3ZlcmZsb3dDaGFu
Z2VkICYmICF2ZXJ0aWNhbExheW91dE92ZXJmbG93Q2hhbmdlZCkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBSZWZQdHI8T3ZlcmZsb3dFdmVudD4gb3ZlcmZsb3dFdmVudCA9IE92ZXJm
bG93RXZlbnQ6OmNyZWF0ZShob3Jpem9udGFsTGF5b3V0T3ZlcmZsb3dDaGFuZ2VkLCBoYXNIb3Jp
em9udGFsTGF5b3V0T3ZlcmZsb3csIHZlcnRpY2FsTGF5b3V0T3ZlcmZsb3dDaGFuZ2VkLCBoYXNW
ZXJ0aWNhbExheW91dE92ZXJmbG93KTsKKyAgICAgICAgUmVmPE92ZXJmbG93RXZlbnQ+IG92ZXJm
bG93RXZlbnQgPSBPdmVyZmxvd0V2ZW50OjpjcmVhdGUoaG9yaXpvbnRhbExheW91dE92ZXJmbG93
Q2hhbmdlZCwgaGFzSG9yaXpvbnRhbExheW91dE92ZXJmbG93LCB2ZXJ0aWNhbExheW91dE92ZXJm
bG93Q2hhbmdlZCwgaGFzVmVydGljYWxMYXlvdXRPdmVyZmxvdyk7CiAgICAgICAgIG92ZXJmbG93
RXZlbnQtPnNldFRhcmdldChtX2Jsb2NrLT5lbGVtZW50KCkpOwotICAgICAgICBtX2Jsb2NrLT5k
b2N1bWVudCgpLmVucXVldWVPdmVyZmxvd0V2ZW50KG92ZXJmbG93RXZlbnQucmVsZWFzZSgpKTsK
KyAgICAgICAgbV9ibG9jay0+ZG9jdW1lbnQoKS5lbnF1ZXVlT3ZlcmZsb3dFdmVudChXVEY6Om1v
dmUob3ZlcmZsb3dFdmVudCkpOwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCmluZGV4IDA3MjEwNzY5ZmQwNmJhOWNlODdhYzQ2
NTJjOTllMmMxNzhkMjg0ZjEuLjdlYjU4YTI2YTQ4ZmY3MGVmZjllNWY1NTNkNTZlNDA4ZmIxZjIy
YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAt
NDksOCArNDksOCBAQCBXb3JrZXJFdmVudFF1ZXVlOjp+V29ya2VyRXZlbnRRdWV1ZSgpCiBjbGFz
cyBXb3JrZXJFdmVudFF1ZXVlOjpFdmVudERpc3BhdGNoZXIKIHsKIHB1YmxpYzoKLSAgICBFdmVu
dERpc3BhdGNoZXIoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFdvcmtlckV2ZW50UXVldWUmIGV2
ZW50UXVldWUpCi0gICAgICAgIDogbV9ldmVudChldmVudCkKKyAgICBFdmVudERpc3BhdGNoZXIo
UmVmUHRyPEV2ZW50PiYmIGV2ZW50LCBXb3JrZXJFdmVudFF1ZXVlJiBldmVudFF1ZXVlKQorICAg
ICAgICA6IG1fZXZlbnQoV1RGOjptb3ZlKGV2ZW50KSkKICAgICAgICAgLCBtX2V2ZW50UXVldWUo
ZXZlbnRRdWV1ZSkKICAgICAgICAgLCBtX2lzQ2FuY2VsbGVkKGZhbHNlKQogICAgIHsKQEAgLTY3
LDcgKzY3LDcgQEAgcHVibGljOgogICAgICAgICBpZiAobV9pc0NhbmNlbGxlZCkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgbV9ldmVudFF1ZXVlLm1fZXZlbnREaXNwYXRjaGVyTWFwLnJl
bW92ZShtX2V2ZW50LmdldCgpKTsKLSAgICAgICAgbV9ldmVudC0+dGFyZ2V0KCktPmRpc3BhdGNo
RXZlbnQobV9ldmVudCk7CisgICAgICAgIG1fZXZlbnQtPnRhcmdldCgpLT5kaXNwYXRjaEV2ZW50
KCptX2V2ZW50KTsKICAgICAgICAgbV9ldmVudCA9IG51bGxwdHI7CiAgICAgfQogCkBAIC04Mywx
MyArODMsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNDYW5jZWxsZWQ7CiB9OwogCi1ib29s
IFdvcmtlckV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkK
K2Jvb2wgV29ya2VyRXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkK
IHsKICAgICBpZiAobV9pc0Nsb3NlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRXZl
bnREaXNwYXRjaGVyKiBldmVudERpc3BhdGNoZXJQdHIgPSBuZXcgRXZlbnREaXNwYXRjaGVyKGV2
ZW50LmdldCgpLCAqdGhpcyk7Ci0gICAgbV9ldmVudERpc3BhdGNoZXJNYXAuYWRkKGV2ZW50LCBl
dmVudERpc3BhdGNoZXJQdHIpOworICAgIEV2ZW50RGlzcGF0Y2hlciogZXZlbnREaXNwYXRjaGVy
UHRyID0gbmV3IEV2ZW50RGlzcGF0Y2hlcihldmVudC5jb3B5UmVmKCksICp0aGlzKTsKKyAgICBt
X2V2ZW50RGlzcGF0Y2hlck1hcC5hZGQoZXZlbnQucHRyKCksIGV2ZW50RGlzcGF0Y2hlclB0cik7
CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnBvc3RUYXNrKFtldmVudERpc3BhdGNoZXJQ
dHJdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RXZlbnREaXNwYXRjaGVyPiBldmVudERpc3BhdGNoZXIoZXZlbnREaXNwYXRjaGVyUHRyKTsKICAg
ICAgICAgZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRjaCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckV2ZW50UXVldWUuaAppbmRleCA5YTA1NzU2ODExOTI5MjMwYjRiZWU1NzgwZGVjODQx
OWQ1NWEyNDdlLi4zZGJmMzNkYjM4YjdjNzkzMzE4ZGJiZjFlNDg0OTRmMDQyNmVjYjc0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuaApAQCAtMzksNyArMzksNyBA
QCBwdWJsaWM6CiAgICAgZXhwbGljaXQgV29ya2VyRXZlbnRRdWV1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0Jik7CiAgICAgdmlydHVhbCB+V29ya2VyRXZlbnRRdWV1ZSgpOwogCi0gICAgdmlydHVh
bCBib29sIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgYm9vbCBjYW5jZWxFdmVudChFdmVudCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBj
bG9zZSgpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcAppbmRleCBhYjE3MDhmZTQ0MjVk
MDFmNjUxNTgzOTMzNTQ3ZDljOWM3ZGI2ZTFkLi5jM2UxNTM4YjQyNmNlMzU2NThjMDhiMzEyZDhm
YzkxOTA1OTkwYTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKQEAgLTgxLDI1ICs4MSwyNCBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFRocm90dGxl
ZFByb2dyZXNzRXZlbnQoYm9vbCBsZQogICAgIG1faGFzVGhyb3R0bGVkUHJvZ3Jlc3NFdmVudCA9
IHRydWU7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRp
c3BhdGNoUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KFJlZlB0cjxFdmVudD4mJiBldmVudCwgUHJvZ3Jl
c3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2ZW50QWN0aW9uKQordm9pZCBYTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoRXZlbnQm
IGV2ZW50LCBQcm9ncmVzc0V2ZW50QWN0aW9uIHByb2dyZXNzRXZlbnRBY3Rpb24pCiB7CiAgICAg
aWYgKHByb2dyZXNzRXZlbnRBY3Rpb24gPT0gRmx1c2hQcm9ncmVzc0V2ZW50KQogICAgICAgICBm
bHVzaFByb2dyZXNzRXZlbnQoKTsKIAotICAgIGRpc3BhdGNoRXZlbnQoV1RGOjptb3ZlKGV2ZW50
KSk7CisgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQoUmVmUHRyPEV2ZW50PiYmIGV2ZW50
KQordm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVu
dChFdmVudCYgZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGV2ZW50KTsKICAgICBpZiAobV9kZWZlckV2
ZW50cykgewotICAgICAgICBpZiAobV9kZWZlcnJlZEV2ZW50cy5zaXplKCkgPiAxICYmIGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCAmJiBldmVudC0+
dHlwZSgpID09IG1fZGVmZXJyZWRFdmVudHMubGFzdCgpLT50eXBlKCkpIHsKKyAgICAgICAgaWYg
KG1fZGVmZXJyZWRFdmVudHMuc2l6ZSgpID4gMSAmJiBldmVudC50eXBlKCkgPT0gZXZlbnROYW1l
cygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCAmJiBldmVudC50eXBlKCkgPT0gbV9kZWZlcnJlZEV2
ZW50cy5sYXN0KCktPnR5cGUoKSkgewogICAgICAgICAgICAgLy8gUmVhZHlzdGF0ZWNoYW5nZSBl
dmVudHMgYXJlIHN0YXRlLWxlc3Mgc28gYXZvaWQgcmVwZWF0aW5nIHR3byBpZGVudGljYWwgZXZl
bnRzIGluIGEgcm93IG9uIHJlc3VtZS4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBtX2RlZmVycmVkRXZlbnRzLmFwcGVuZChXVEY6Om1vdmUoZXZlbnQpKTsKKyAgICAg
ICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQoZXZlbnQpOwogICAgIH0gZWxzZQotICAgICAgICBt
X3RhcmdldC0+ZGlzcGF0Y2hFdmVudChXVEY6Om1vdmUoZXZlbnQpKTsKKyAgICAgICAgbV90YXJn
ZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlKQpAQCAtMTIwLDggKzExOSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50VGhyb3R0bGU6OmZsdXNoUHJvZ3Jlc3NFdmVudCgpCiB7CiAgICAgaWYgKG1fZGVmZXJFdmVu
dHMgJiYgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQpIHsKICAgICAgICAgLy8gTW92ZSB0aGUgcHJv
Z3Jlc3MgZXZlbnQgdG8gdGhlIHF1ZXVlLCB0byBnZXQgaXQgaW4gdGhlIHJpZ2h0IG9yZGVyIG9u
IHJlc3VtZS4KLSAgICAgICAgbV9kZWZlcnJlZEV2ZW50cy5hcHBlbmQobV9kZWZlcnJlZFByb2dy
ZXNzRXZlbnQpOwotICAgICAgICBtX2RlZmVycmVkUHJvZ3Jlc3NFdmVudCA9IG51bGxwdHI7Cisg
ICAgICAgIG1fZGVmZXJyZWRFdmVudHMuYXBwZW5kKG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50LnJl
bGVhc2VOb25OdWxsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNDQsMTYgKzE0
MiwxNSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRj
aERlZmVycmVkRXZlbnRzKCkKICAgICAvLyBUYWtlIG92ZXIgdGhlIGRlZmVycmVkIGV2ZW50cyBi
ZWZvcmUgZGlzcGF0Y2hpbmcgdGhlbSB3aGljaCBjYW4gcG90ZW50aWFsbHkgYWRkIG1vcmUuCiAg
ICAgYXV0byBkZWZlcnJlZEV2ZW50cyA9IFdURjo6bW92ZShtX2RlZmVycmVkRXZlbnRzKTsKIAot
ICAgIFJlZlB0cjxFdmVudD4gZGVmZXJyZWRQcm9ncmVzc0V2ZW50ID0gbV9kZWZlcnJlZFByb2dy
ZXNzRXZlbnQ7Ci0gICAgbV9kZWZlcnJlZFByb2dyZXNzRXZlbnQgPSBudWxscHRyOworICAgIFJl
ZlB0cjxFdmVudD4gZGVmZXJyZWRQcm9ncmVzc0V2ZW50ID0gV1RGOjptb3ZlKG1fZGVmZXJyZWRQ
cm9ncmVzc0V2ZW50KTsKIAogICAgIGZvciAoYXV0byYgZGVmZXJyZWRFdmVudCA6IGRlZmVycmVk
RXZlbnRzKQotICAgICAgICBkaXNwYXRjaEV2ZW50KGRlZmVycmVkRXZlbnQucmVsZWFzZSgpKTsK
KyAgICAgICAgZGlzcGF0Y2hFdmVudChkZWZlcnJlZEV2ZW50KTsKIAogICAgIC8vIFRoZSBwcm9n
cmVzcyBldmVudCB3aWxsIGJlIGluIHRoZSBtX2RlZmVycmVkRXZlbnRzIHZlY3RvciBpZiB0aGUg
bG9hZCB3YXMgZmluaXNoZWQgd2hpbGUgc3VzcGVuZGVkLgogICAgIC8vIElmIG5vdCwganVzdCBz
ZW5kIHRoZSBtb3N0IHVwLXRvLWRhdGUgcHJvZ3Jlc3Mgb24gcmVzdW1lLgogICAgIGlmIChkZWZl
cnJlZFByb2dyZXNzRXZlbnQpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoV1RGOjptb3ZlKGRlZmVy
cmVkUHJvZ3Jlc3NFdmVudCkpOworICAgICAgICBkaXNwYXRjaEV2ZW50KCpkZWZlcnJlZFByb2dy
ZXNzRXZlbnQpOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
OjpmaXJlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCmluZGV4IDI5ZjRkNjU1ZDgzZDE2ZjYxNzBmZDU1ODc1
NmQ1YTc2MTk1MDRmMDIuLmMxMDA5ZTUwZGI5MDhjYTQzM2NlNDVkZjUzZmU1MDc0ZWZhNzc2MDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnRUaHJvdHRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnRUaHJvdHRsZS5oCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZSgpOwogCiAgICAgdm9pZCBkaXNw
YXRjaFRocm90dGxlZFByb2dyZXNzRXZlbnQoYm9vbCBsZW5ndGhDb21wdXRhYmxlLCB1bnNpZ25l
ZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWwpOwotICAgIHZvaWQg
ZGlzcGF0Y2hSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoUmVmUHRyPEV2ZW50PiYmLCBQcm9ncmVzc0V2
ZW50QWN0aW9uID0gRG9Ob3RGbHVzaFByb2dyZXNzRXZlbnQpOworICAgIHZvaWQgZGlzcGF0Y2hS
ZWFkeVN0YXRlQ2hhbmdlRXZlbnQoRXZlbnQmLCBQcm9ncmVzc0V2ZW50QWN0aW9uID0gRG9Ob3RG
bHVzaFByb2dyZXNzRXZlbnQpOwogICAgIHZvaWQgZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYpOwogCiAgICAgdm9pZCBzdXNwZW5kKCk7CkBAIC02MSw3ICs2MSw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7CiAgICAgdm9pZCBkaXNwYXRjaERl
ZmVycmVkRXZlbnRzKCk7CiAgICAgdm9pZCBmbHVzaFByb2dyZXNzRXZlbnQoKTsKLSAgICB2b2lk
IGRpc3BhdGNoRXZlbnQoUmVmUHRyPEV2ZW50PiYmKTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnQo
RXZlbnQmKTsKIAogICAgIGJvb2wgaGFzRXZlbnRUb0Rpc3BhdGNoKCkgY29uc3Q7CiAKQEAgLTc1
LDcgKzc1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kZWZlckV2ZW50czsKICAgICBSZWZQ
dHI8RXZlbnQ+IG1fZGVmZXJyZWRQcm9ncmVzc0V2ZW50OwotICAgIFZlY3RvcjxSZWZQdHI8RXZl
bnQ+PiBtX2RlZmVycmVkRXZlbnRzOworICAgIFZlY3RvcjxSZWY8RXZlbnQ+PiBtX2RlZmVycmVk
RXZlbnRzOwogICAgIFRpbWVyIG1fZGlzcGF0Y2hEZWZlcnJlZEV2ZW50c1RpbWVyOwogfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>