<?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>211511</bug_id>
          
          <creation_ts>2020-05-06 06:54:44 -0700</creation_ts>
          <short_desc>[GTK] Rework clipboard handling in preparation for GTK4</short_desc>
          <delta_ts>2020-05-12 08:20:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</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>
          
          <blocked>210100</blocked>
    
    <blocked>211561</blocked>
    
    <blocked>211723</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mifenton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1649581</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-06 06:54:44 -0700</bug_when>
    <thetext>Use async APIs to avoid blocking the UI process during the communication with the clipboard. In GTK4 only async APIs are available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649585</commentid>
    <comment_count>1</comment_count>
      <attachid>398610</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-06 07:05:08 -0700</bug_when>
    <thetext>Created attachment 398610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1650042</commentid>
    <comment_count>2</comment_count>
      <attachid>398723</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-07 05:21:54 -0700</bug_when>
    <thetext>Created attachment 398723
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651245</commentid>
    <comment_count>3</comment_count>
      <attachid>399013</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-11 05:50:48 -0700</bug_when>
    <thetext>Created attachment 399013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651716</commentid>
    <comment_count>4</comment_count>
      <attachid>399013</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-05-12 06:50:52 -0700</bug_when>
    <thetext>Comment on attachment 399013
Patch

Looks good overall, with a few nits you may want to take a look at before landing.


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

&gt; Source/WebCore/editing/gtk/WebContentReaderGtk.cpp:53
&gt; +bool WebContentReader::readFilePaths(const Vector&lt;String&gt;&amp; paths)

This is exactly the same implementation as for Cocoa, and it seems like a reasonable
default implementation for any port. I would move this into “WebContentReader.cpp” and
share the code.

&gt; Source/WebCore/editing/gtk/WebContentReaderGtk.cpp:93
&gt; +bool WebContentReader::readURL(const URL&amp;, const String&amp;)

The Cocoa port creates an anchor element when reading an URL, resulting in a
fragment with something like “&lt;a href=&quot;url&quot;&gt;title-or-url&lt;/a&gt;” being added.

I think it makes sense to mimic that behavior. Feel free to leave a TODO note
here to do that later on as a follow-up patch.

&gt; Source/WebCore/editing/gtk/WebContentReaderGtk.cpp:98
&gt; +bool WebContentMarkupReader::readHTML(const String&amp;)

This could also be implemented, seems easy enough to call “sanitizeMarkup()” on the
input string and use the result from that.

Feel free to leave it as a TODO for a follow-up patch as well.

&gt; Source/WebCore/platform/gtk/PasteboardGtk.cpp:106
&gt; +    ASSERT(m_selectionData);

Shouldn&apos;t this be also a “RELEASE_ASSERT()” as above? It looks like to me
that both assertions should be of the same kind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651717</commentid>
    <comment_count>5</comment_count>
      <attachid>399013</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-12 07:05:11 -0700</bug_when>
    <thetext>Comment on attachment 399013
Patch

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

&gt;&gt; Source/WebCore/editing/gtk/WebContentReaderGtk.cpp:93
&gt;&gt; +bool WebContentReader::readURL(const URL&amp;, const String&amp;)
&gt; 
&gt; The Cocoa port creates an anchor element when reading an URL, resulting in a
&gt; fragment with something like “&lt;a href=&quot;url&quot;&gt;title-or-url&lt;/a&gt;” being added.
&gt; 
&gt; I think it makes sense to mimic that behavior. Feel free to leave a TODO note
&gt; here to do that later on as a follow-up patch.

We don&apos;t really support URLs, we use _NETSCAPE_URL for drag an drop and the html markup is already generated so it&apos;s always handled as text/html. This is never called for GTK port.

&gt;&gt; Source/WebCore/editing/gtk/WebContentReaderGtk.cpp:98
&gt;&gt; +bool WebContentMarkupReader::readHTML(const String&amp;)
&gt; 
&gt; This could also be implemented, seems easy enough to call “sanitizeMarkup()” on the
&gt; input string and use the result from that.
&gt; 
&gt; Feel free to leave it as a TODO for a follow-up patch as well.

I&apos;m not sure this is called for the GTK port either, I&apos;ll check.

&gt;&gt; Source/WebCore/platform/gtk/PasteboardGtk.cpp:106
&gt;&gt; +    ASSERT(m_selectionData);
&gt; 
&gt; Shouldn&apos;t this be also a “RELEASE_ASSERT()” as above? It looks like to me
&gt; that both assertions should be of the same kind.

No, the other should be ASSERT instead, since I don&apos;t usually build with debug I use release assert during development and then convert them to asserts, but I guess I forgot one.

&gt; Source/WebCore/platform/gtk/PasteboardGtk.cpp:249
&gt; +void Pasteboard::read(PasteboardWebContentReader&amp; reader, WebContentReadingPolicy policy, Optional&lt;size_t&gt;)

This is where the WebContentReader is used and we don&apos;t call reader.readURL(), that&apos;s why it&apos;s unimplemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651719</commentid>
    <comment_count>6</comment_count>
      <attachid>399126</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-12 07:16:47 -0700</bug_when>
    <thetext>Created attachment 399126
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651736</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-12 08:20:38 -0700</bug_when>
    <thetext>Committed r261554: &lt;https://trac.webkit.org/changeset/261554&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398610</attachid>
            <date>2020-05-06 07:05:08 -0700</date>
            <delta_ts>2020-05-07 05:21:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk-clipboard.diff</filename>
            <type>text/plain</type>
            <size>68340</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNmI0ZDNjMDFjYmMuLjk1OWUxNzQzMzg0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDUwIEBACisyMDIwLTA1LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZXdvcmsgY2xpcGJvYXJkIGhhbmRsaW5nIGlu
IHByZXBhcmF0aW9uIGZvciBHVEs0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTE1MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW1vdmUgUGxhdGZvcm1QYXN0ZWJvYXJkIGltcGxlbWVudGF0aW9uIHRo
YXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgQ2xpcGJvYXJkIGNsYXNzIGluIHRoZSBXZWJLaXQKKyAg
ICAgICAgbGF5ZXIuIFdoZW4gUGFzdGVib2FyZCBjbGFzcyBpcyBjcmVhdGVkIGZvciBjb3B5IGFu
ZCBwYXN0ZSBvcGVyYXRpb25zLCBpdCBubyBsb25nZXIgaGFzIGEgU2VsZWN0aW9uRGF0YSBtZW1i
ZXIsCisgICAgICAgIGl0IGp1c3QgdXNlcyB0aGUgbmV3IG1ldGhvZHMgaW4gdGhlIHBhc3RlYm9h
cmQgc3RyYXRlZ3kgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2xpcGJvYXJkLiBXZWJDb250ZW50
UmVhZGVyIGhhcworICAgICAgICBub3cgYW4gaW1wbGVtZW50YXRpb24gZm9yIEdUSyBhbmQgaXQn
cyB1c2VkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBjbGlwYm9hcmQsIHRoZSBzYW1lIHdheSBpdCdz
IGRvbmUgaW4gb3RoZXIgcG9ydHMuCisKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAg
ICAgKiBlZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIuaDoKKyAgICAgICAgKiBlZGl0aW5nL2d0ay9F
ZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJv
YXJkKTogVXNlIHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgpLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQpOiBVc2UgV2ViQ29udGVudFJlYWRlci4K
KyAgICAgICAgKiBlZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZEZpbGVQYXRocyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJDb250ZW50UmVhZGVyOjpyZWFkUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNv
bnRlbnRSZWFkZXI6OnJlYWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVh
ZGVyOjpyZWFkVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJrdXBSZWFkZXI6
OnJlYWRIVE1MKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudFJlYWRlcjo6cmVhZERhdGFCdWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OlBh
c3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6c2VsZWN0aW9uRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVz
Rm9yTGVnYWN5VW5zYWZlQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
cmVhZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpmaWxlQ29udGVudFN0
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJkR3RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvU2VsZWN0aW9uRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25E
YXRhOjpzZXRVUkwpOiBEbyBub3Qgb3ZlcnJpZGUgdGhlIHRleHQgYW5kIG1hcmt1cCBpZiBpdCBo
YXMgYWxyZWFkeSBiZWVuIHNldC4KKwogMjAyMC0wNS0wMiAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBsb2cgY2hhbm5lbCBmb3IgT3Zlcmxh
eVNjcm9sbGJhcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKaW5kZXggM2Q3NWJkNTIwY2U4Li5hNzYwOTI3
NzBmMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC00Miw2ICs0Miw3IEBAIGFjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAogZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rp
b25BdGsuY3BwCiAKIGVkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKK2VkaXRpbmcvZ3RrL1dlYkNv
bnRlbnRSZWFkZXJHdGsuY3BwCiAKIGxvYWRlci9zb3VwL1Jlc291cmNlTG9hZGVyU291cC5jcHAK
IApAQCAtMTEwLDcgKzExMSw2IEBAIHBsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNw
cAogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEhlbHBlci5jcHAKIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwCi1w
bGF0Zm9ybS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJkR3RrLmNwcAogcGxhdGZvcm0vZ3RrL1BsYXRm
b3JtU2NyZWVuR3RrLmNwcAogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAK
IHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUdhZGdldC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9XZWJDb250ZW50UmVhZGVyLmgKaW5kZXggNTQ1NDFmMGE3MmJiLi4wOGFhMTI0MjY2MjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oCkBAIC02OCwxOCArNjgs
MjEgQEAgcHVibGljOgogICAgIHZvaWQgYWRkRnJhZ21lbnQoUmVmPERvY3VtZW50RnJhZ21lbnQ+
JiYpOwogCiBwcml2YXRlOgotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgcmVhZFdlYkFy
Y2hpdmUoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBM
QVRGT1JNKEdUSykKICAgICBib29sIHJlYWRGaWxlUGF0aChjb25zdCBTdHJpbmcmLCBQcmVzZW50
YXRpb25TaXplIHByZWZlcnJlZFByZXNlbnRhdGlvblNpemUgPSB7IH0sIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUgPSB7IH0pIG92ZXJyaWRlOwogICAgIGJvb2wgcmVhZEZpbGVQYXRocyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlOwogICAgIGJvb2wgcmVhZEhUTUwoY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCByZWFkUlRGRChTaGFyZWRCdWZmZXImKSBvdmVycmlk
ZTsKLSAgICBib29sIHJlYWRSVEYoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBy
ZWFkSW1hZ2UoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQcmVzZW50
YXRpb25TaXplIHByZWZlcnJlZFByZXNlbnRhdGlvblNpemUgPSB7IH0pIG92ZXJyaWRlOwogICAg
IGJvb2wgcmVhZFVSTChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBvdmVycmlkZTsK
LSAgICBib29sIHJlYWREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQcmVzZW50YXRpb25TaXplIHByZWZlcnJlZFByZXNlbnRh
dGlvblNpemUgPSB7IH0pIG92ZXJyaWRlOwogICAgIGJvb2wgcmVhZFBsYWluVGV4dChjb25zdCBT
dHJpbmcmKSBvdmVycmlkZTsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgYm9v
bCByZWFkV2ViQXJjaGl2ZShTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKKyAgICBib29sIHJlYWRS
VEZEKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcmVhZFJURihTaGFyZWRCdWZm
ZXImKSBvdmVycmlkZTsKKyAgICBib29sIHJlYWREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYsIGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQcmVzZW50YXRpb25TaXplIHBy
ZWZlcnJlZFByZXNlbnRhdGlvblNpemUgPSB7IH0pIG92ZXJyaWRlOworI2VuZGlmCiB9OwogCiBj
bGFzcyBXZWJDb250ZW50TWFya3VwUmVhZGVyIGZpbmFsIDogcHVibGljIEZyYW1lV2ViQ29udGVu
dFJlYWRlciB7CkBAIC05MiwxOCArOTUsMjEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIHJlYWRXZWJBcmNoaXZlKFNoYXJlZEJ1ZmZl
ciYpIG92ZXJyaWRlOworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAg
Ym9vbCByZWFkRmlsZVBhdGgoY29uc3QgU3RyaW5nJiwgUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSwg
Y29uc3QgU3RyaW5nJiA9IHsgfSkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29s
IHJlYWRGaWxlUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mKSBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQogICAgIGJvb2wgcmVhZEhUTUwoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCByZWFkUlRGRChTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKLSAgICBib29sIHJlYWRSVEYo
U2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CiAgICAgYm9vbCByZWFkSW1hZ2UoUmVmPFNoYXJlZEJ1
ZmZlcj4mJiwgY29uc3QgU3RyaW5nJiwgUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIHJlYWRVUkwoY29uc3QgVVJMJiwgY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHJlYWREYXRhQnVmZmVy
KFNoYXJlZEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFByZXNlbnRhdGlv
blNpemUgPSB7IH0pIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCByZWFkUGxh
aW5UZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
KworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGJvb2wgcmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVm
ZmVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCByZWFkUlRGRChTaGFyZWRCdWZmZXImKSBvdmVycmlk
ZTsKKyAgICBib29sIHJlYWRSVEYoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBy
ZWFkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBQcmVzZW50YXRpb25TaXplID0geyB9KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorI2Vu
ZGlmCiB9OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIGRlZmluZWQoX19PQkpDX18pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCBkNDFlNGI5MzAyNzYuLmJl
ZjlmZjYwMDVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9y
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBA
IC0yNyw5ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgi
CiAKLSNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRl
ICJET01VUkwuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50LmgiCkBAIC00NCw0OSArNDIsMTIgQEAK
ICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25EYXRhLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJDb250ZW50UmVhZGVyLmgiCiAj
aW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPGNh
aXJvLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCi17Ci0gICAgY2hvc2VQbGFpblRleHQg
PSBmYWxzZTsKLQotICAgIGlmICghcGFzdGVib2FyZC5oYXNEYXRhKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgY29uc3QgYXV0byYgc2VsZWN0aW9uID0gcGFzdGVib2FyZC5zZWxl
Y3Rpb25EYXRhKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5oYXNJbWFnZSgpKSB7Ci0gICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGF1dG8gc3RhdHVzID0gY2Fpcm9fc3VyZmFj
ZV93cml0ZV90b19wbmdfc3RyZWFtKHNlbGVjdGlvbi5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdl
dCgpLCBbXSh2b2lkKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVk
IHNpemUpIHsKLSAgICAgICAgICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8dWludDhf
dD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiBDQUlST19T
VEFUVVNfU1VDQ0VTUzsKLSAgICAgICAgfSwgJmJ1ZmZlcik7Ci0gICAgICAgIGlmIChzdGF0dXMg
PT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGF1dG8gYmxvYiA9IEJsb2I6
OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlciksICJpbWFnZS9wbmciKTsKLSAgICAgICAgICAgIGlmICgh
ZnJhbWUuZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZvckltYWdlQW5kVVJMKCpmcmFtZS5kb2N1bWVu
dCgpLCBET01VUkw6OmNyZWF0ZU9iamVjdFVSTCgqZnJhbWUuZG9jdW1lbnQoKSwgYmxvYiksIHsg
fSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2VsZWN0aW9uLmhhc01hcmt1cCgpICYm
IGZyYW1lLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoKmZyYW1lLmRvY3VtZW50KCksIHNlbGVjdGlvbi5tYXJrdXAoKSwgZW1wdHlTdHJpbmcoKSwg
RGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsKLQotICAgIGlmICghYWxsb3dQbGFp
blRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHNlbGVjdGlvbi5oYXNU
ZXh0KCkpIHsKLSAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0cnVlOwotICAgICAgICByZXR1cm4g
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBzZWxlY3Rpb24u
dGV4dCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogdm9pZCBFZGl0b3I6
OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBh
c3RlT3B0aW9uPiBvcHRpb25zKQogewogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rl
ZFJhbmdlKCk7CkBAIC05NCw3ICs1NSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgq
cGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5z
KFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQo
KnBhc3RlYm9hcmQsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQ
bGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9u
cy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdt
ZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpAQCAtMTU0LDcgKzExNSwxMCBAQCB2b2lkIEVkaXRv
cjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIAog
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJk
KFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29s
IGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEocGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJh
bWUoKSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKKyAgICBXZWJD
b250ZW50UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVudC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1Bs
YWluVGV4dCk7CisgICAgcGFzdGVib2FyZC5yZWFkKHJlYWRlcik7CisgICAgY2hvc2VQbGFpblRl
eHQgPSByZWFkZXIubWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dDsKKyAgICByZXR1cm4gV1RGTW92
ZShyZWFkZXIuZnJhZ21lbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzdkMzRiZGUyZTdmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvV2ViQ29udGVudFJlYWRlckd0
ay5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvbnRlbnRSZWFkZXIuaCIKKworI2luY2x1ZGUg
IkJsb2JVUkwuaCIKKyNpbmNsdWRlICJET01VUkwuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRGaWxlUGF0aChjb25zdCBTdHJp
bmcmIHBhdGgsIFByZXNlbnRhdGlvblNpemUsIGNvbnN0IFN0cmluZyYpCit7CisgICAgaWYgKHBh
dGguaXNFbXB0eSgpIHx8ICFmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIG1hcmt1cCA9IHVybFRvTWFya3VwKFVSTCh7IH0sIHBhdGgpLCBwYXRoKTsK
KyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50
KCksIG1hcmt1cCwgImZpbGU6Ly8iLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQp
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRG
aWxlUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIGlmIChwYXRocy5p
c0VtcHR5KCkgfHwgIWZyYW1lLmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKQorICAgICAgICByZWFkRmlsZVBhdGgocGF0aCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkSFRN
TChjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoZnJhbWUuc2V0dGluZ3MoKS5wcmVm
ZXJNSU1FVHlwZUZvckltYWdlcygpIHx8ICFmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZy
YW1lLmRvY3VtZW50KCksIHN0cmluZywgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdB
bmRQbHVnaW5Db250ZW50KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViQ29udGVu
dFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgaWYgKCFh
bGxvd1BsYWluVGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYWRkRnJhZ21lbnQo
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCksIHRleHQpKTsK
KworICAgIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQgPSB0cnVlOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRJbWFnZShSZWY8U2hhcmVkQnVmZmVy
PiYmIGJ1ZmZlciwgY29uc3QgU3RyaW5nJiB0eXBlLCBQcmVzZW50YXRpb25TaXplIHByZWZlcnJl
ZFByZXNlbnRhdGlvblNpemUpCit7CisgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOworICAg
IGF1dG8mIGRvY3VtZW50ID0gKmZyYW1lLmRvY3VtZW50KCk7CisgICAgYWRkRnJhZ21lbnQoY3Jl
YXRlRnJhZ21lbnRGb3JJbWFnZUFuZFVSTChkb2N1bWVudCwgRE9NVVJMOjpjcmVhdGVPYmplY3RV
UkwoZG9jdW1lbnQsIEJsb2I6OmNyZWF0ZShidWZmZXIuZ2V0KCksIHR5cGUpKSwgcHJlZmVycmVk
UHJlc2VudGF0aW9uU2l6ZSkpOworCisgICAgcmV0dXJuIGZyYWdtZW50OworfQorCitib29sIFdl
YkNvbnRlbnRSZWFkZXI6OnJlYWRVUkwoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZEhU
TUwoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9h
cmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRleCAxYjhlYTA2
Y2JkYzcuLjAxZGI1OTk1NTIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApA
QCAtMTM2LDE4ICsxMzYsMjEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+UGFzdGVib2FyZFdl
YkNvbnRlbnRSZWFkZXIoKSA9IGRlZmF1bHQ7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2
aXJ0dWFsIGJvb2wgcmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJikgPSAwOworI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgdmlydHVhbCBib29sIHJlYWRGaWxlUGF0
aChjb25zdCBTdHJpbmcmLCBQcmVzZW50YXRpb25TaXplIHByZWZlcnJlZFByZXNlbnRhdGlvblNp
emUgPSB7IH0sIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUgPSB7IH0pID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgcmVhZEZpbGVQYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgcmVhZEhUTUwoY29uc3QgU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCByZWFkUlRGRChTaGFyZWRCdWZmZXImKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHJlYWRSVEYo
U2hhcmVkQnVmZmVyJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWFkSW1hZ2UoUmVmPFNoYXJl
ZEJ1ZmZlcj4mJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQcmVzZW50YXRpb25TaXplIHByZWZlcnJl
ZFByZXNlbnRhdGlvblNpemUgPSB7IH0pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVhZFVSTChj
b25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHJl
YWREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBQcmVzZW50YXRpb25TaXplIHByZWZlcnJlZFByZXNlbnRhdGlvblNpemUgPSB7
IH0pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmKSA9
IDA7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZpcnR1YWwgYm9vbCByZWFk
V2ViQXJjaGl2ZShTaGFyZWRCdWZmZXImKSA9IDA7CisgICAgdmlydHVhbCBib29sIHJlYWRSVEZE
KFNoYXJlZEJ1ZmZlciYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZFJURihTaGFyZWRCdWZm
ZXImKSA9IDA7CisgICAgdmlydHVhbCBib29sIHJlYWREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYs
IGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQcmVzZW50YXRpb25TaXpl
IHByZWZlcnJlZFByZXNlbnRhdGlvblNpemUgPSB7IH0pID0gMDsKKyNlbmRpZgogfTsKIAogc3Ry
dWN0IFBhc3RlYm9hcmRQbGFpblRleHQgewpAQCAtMzEzLDkgKzMxNiw3IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHdyaXRlVG9DbGlwYm9hcmQoKTsK
LSAgICB2b2lkIHJlYWRGcm9tQ2xpcGJvYXJkKCk7Ci0gICAgUmVmPFNlbGVjdGlvbkRhdGE+IG1f
c2VsZWN0aW9uRGF0YTsKKyAgICBSZWZQdHI8U2VsZWN0aW9uRGF0YT4gbV9zZWxlY3Rpb25EYXRh
OwogICAgIFN0cmluZyBtX25hbWU7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaAppbmRleCBiNjNlMzVkMDk4MWEuLjVkOTE2NGYxNDA4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgKQEAgLTgx
LDggKzgxLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNTdHJpbmdTYWZl
Rm9yRE9NVG9SZWFkRm9yVHlwZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKSA9IDA7CiAKICNpZiBQTEFURk9STShHVEspCisgICAgdmlydHVhbCBWZWN0b3I8U3Ry
aW5nPiB0eXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CisgICAgdmlydHVh
bCBTdHJpbmcgcmVhZFRleHRGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHJlYWRGaWxlUGF0aHNGcm9tQ2xp
cGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IHJlYWRCdWZmZXJGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAgIHZpcnR1
YWwgdm9pZCB3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFNl
bGVjdGlvbkRhdGEmJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZVRvQ2xpcGJvYXJkKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFNlbGVjdGlvbkRhdGEmKSA9IDA7Ci0g
ICAgdmlydHVhbCBSZWY8U2VsZWN0aW9uRGF0YT4gcmVhZEZyb21DbGlwYm9hcmQoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNsaXBib2Fy
ZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CiAjZW5kaWYgLy8gUExBVEZPUk0o
R1RLKQogCiAjaWYgVVNFKExJQldQRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkR3RrLmNwcAppbmRleCAyMDY3ODIwNzVkZmMuLjI4OWQ4ODA2ZjE2OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcApAQCAtMjMsMTAg
KzIzLDEyIEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJEcmFnRGF0YS5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uRGF0YS5oIgor
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KQEAgLTY2
LDI2ICs2OCwyMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3Jl
YXRlRm9yRHJhZ0FuZERyb3AoY29uc3QgRHJhZ0RhdGEmIGRyYQogI2VuZGlmCiAKIFBhc3RlYm9h
cmQ6OlBhc3RlYm9hcmQoU2VsZWN0aW9uRGF0YSYgc2VsZWN0aW9uRGF0YSkKLSAgICA6IG1fc2Vs
ZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhKQorICAgIDogbV9zZWxlY3Rpb25EYXRhKCZzZWxlY3Rp
b25EYXRhKQogewogfQogCiBQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLSAgICA6IG1fc2VsZWN0aW9uRGF0YShTZWxlY3Rpb25EYXRhOjpjcmVhdGUoKSkKLSAgICAs
IG1fbmFtZShuYW1lKQotewotfQotCi1QYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKLSAgICA6IG1f
c2VsZWN0aW9uRGF0YShTZWxlY3Rpb25EYXRhOjpjcmVhdGUoKSkKKyAgICA6IG1fbmFtZShuYW1l
KQogewogfQogCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkgPSBkZWZhdWx0OwogUGFzdGVib2Fy
ZDo6flBhc3RlYm9hcmQoKSA9IGRlZmF1bHQ7CiAKIGNvbnN0IFNlbGVjdGlvbkRhdGEmIFBhc3Rl
Ym9hcmQ6OnNlbGVjdGlvbkRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX3NlbGVjdGlvbkRh
dGEuZ2V0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zZWxlY3Rpb25EYXRhKTsKKyAgICByZXR1
cm4gKm1fc2VsZWN0aW9uRGF0YS5nZXQoKTsKIH0KIAogc3RhdGljIENsaXBib2FyZERhdGFUeXBl
IHNlbGVjdGlvbkRhdGFUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgdHlw
ZSkKQEAgLTEwMywyMyArMTAxLDkgQEAgc3RhdGljIENsaXBib2FyZERhdGFUeXBlIHNlbGVjdGlv
bkRhdGFUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgdHkKICAgICByZXR1
cm4gQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRl
VG9DbGlwYm9hcmQoKQotewotICAgIGlmIChtX25hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3Jp
dGVUb0NsaXBib2FyZChtX25hbWUsIG1fc2VsZWN0aW9uRGF0YSk7Ci19Ci0KLXZvaWQgUGFzdGVi
b2FyZDo6cmVhZEZyb21DbGlwYm9hcmQoKQotewotICAgIGlmIChtX25hbWUuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX3NlbGVjdGlvbkRhdGEgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRGcm9tQ2xpcGJvYXJkKG1fbmFtZSk7Ci19Ci0K
IHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpCiB7CisgICAgQVNTRVJUKG1fc2VsZWN0aW9uRGF0YSk7CiAgICAgc3dpdGNo
IChzZWxlY3Rpb25EYXRhVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlKSkgewogICAgIGNh
c2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgogICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVV
Ukw6CkBAIC0xMzcsMjYgKzEyMSwzMyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVJbWFnZToKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHdyaXRlVG9DbGlwYm9h
cmQoKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcm
IHRleHQsIFNtYXJ0UmVwbGFjZU9wdGlvbiBzbWFydFJlcGxhY2VPcHRpb24pCiB7Ci0gICAgbV9z
ZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOwotICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0VGV4dCh0
ZXh0KTsKLSAgICBtX3NlbGVjdGlvbkRhdGEtPnNldENhblNtYXJ0UmVwbGFjZShzbWFydFJlcGxh
Y2VPcHRpb24gPT0gQ2FuU21hcnRSZXBsYWNlKTsKLQotICAgIHdyaXRlVG9DbGlwYm9hcmQoKTsK
KyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+Y2xl
YXJBbGwoKTsKKyAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRUZXh0KHRleHQpOworICAgICAg
ICBtX3NlbGVjdGlvbkRhdGEtPnNldENhblNtYXJ0UmVwbGFjZShzbWFydFJlcGxhY2VPcHRpb24g
PT0gQ2FuU21hcnRSZXBsYWNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTZWxlY3Rpb25EYXRh
IGRhdGE7CisgICAgICAgIGRhdGEuc2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgZGF0YS5zZXRDYW5T
bWFydFJlcGxhY2Uoc21hcnRSZXBsYWNlT3B0aW9uID09IENhblNtYXJ0UmVwbGFjZSk7CisgICAg
ICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb0Ns
aXBib2FyZChtX25hbWUsIFdURk1vdmUoZGF0YSkpOworICAgIH0KIH0KIAogdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkVVJMJiBwYXN0ZWJvYXJkVVJMKQogewogICAgIEFT
U0VSVCghcGFzdGVib2FyZFVSTC51cmwuaXNFbXB0eSgpKTsKLQotICAgIG1fc2VsZWN0aW9uRGF0
YS0+Y2xlYXJBbGwoKTsKLSAgICBtX3NlbGVjdGlvbkRhdGEtPnNldFVSTChwYXN0ZWJvYXJkVVJM
LnVybCwgcGFzdGVib2FyZFVSTC50aXRsZSk7Ci0KLSAgICB3cml0ZVRvQ2xpcGJvYXJkKCk7Cisg
ICAgaWYgKG1fc2VsZWN0aW9uRGF0YSkgeworICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPmNsZWFy
QWxsKCk7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0VVJMKHBhc3RlYm9hcmRVUkwudXJs
LCBwYXN0ZWJvYXJkVVJMLnRpdGxlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTZWxlY3Rpb25E
YXRhIGRhdGE7CisgICAgICAgIGRhdGEuc2V0VVJMKHBhc3RlYm9hcmRVUkwudXJsLCBwYXN0ZWJv
YXJkVVJMLnRpdGxlKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFtZSwgV1RGTW92ZShkYXRhKSk7CisgICAg
fQogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlVHJ1c3R3b3J0aHlXZWJVUkxzUGJvYXJkVHlw
ZShjb25zdCBQYXN0ZWJvYXJkVVJMJikKQEAgLTE2NiwzOCArMTU3LDU3IEBAIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVUcnVzdHdvcnRoeVdlYlVSTHNQYm9hcmRUeXBlKGNvbnN0IFBhc3RlYm9hcmRV
UkwmKQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYgcGFz
dGVib2FyZEltYWdlKQogewotICAgIG1fc2VsZWN0aW9uRGF0YS0+Y2xlYXJBbGwoKTsKLSAgICBp
ZiAoIXBhc3RlYm9hcmRJbWFnZS51cmwudXJsLmlzRW1wdHkoKSkgewotICAgICAgICBtX3NlbGVj
dGlvbkRhdGEtPnNldFVSTChwYXN0ZWJvYXJkSW1hZ2UudXJsLnVybCwgcGFzdGVib2FyZEltYWdl
LnVybC50aXRsZSk7Ci0gICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0TWFya3VwKHBhc3RlYm9h
cmRJbWFnZS51cmwubWFya3VwKTsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAg
IG1fc2VsZWN0aW9uRGF0YS0+Y2xlYXJBbGwoKTsKKyAgICAgICAgaWYgKCFwYXN0ZWJvYXJkSW1h
Z2UudXJsLnVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0
VVJMKHBhc3RlYm9hcmRJbWFnZS51cmwudXJsLCBwYXN0ZWJvYXJkSW1hZ2UudXJsLnRpdGxlKTsK
KyAgICAgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0TWFya3VwKHBhc3RlYm9hcmRJbWFnZS51
cmwubWFya3VwKTsKKyAgICAgICAgfQorICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldEltYWdl
KHBhc3RlYm9hcmRJbWFnZS5pbWFnZS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU2Vs
ZWN0aW9uRGF0YSBkYXRhOworICAgICAgICBpZiAoIXBhc3RlYm9hcmRJbWFnZS51cmwudXJsLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgZGF0YS5zZXRVUkwocGFzdGVib2FyZEltYWdlLnVybC51
cmwsIHBhc3RlYm9hcmRJbWFnZS51cmwudGl0bGUpOworICAgICAgICAgICAgZGF0YS5zZXRNYXJr
dXAocGFzdGVib2FyZEltYWdlLnVybC5tYXJrdXApOworICAgICAgICB9CisgICAgICAgIGRhdGEu
c2V0SW1hZ2UocGFzdGVib2FyZEltYWdlLmltYWdlLmdldCgpKTsKKyAgICAgICAgcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFt
ZSwgV1RGTW92ZShkYXRhKSk7CiAgICAgfQotICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0SW1hZ2Uo
cGFzdGVib2FyZEltYWdlLmltYWdlLmdldCgpKTsKLQotICAgIHdyaXRlVG9DbGlwYm9hcmQoKTsK
IH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYg
cGFzdGVib2FyZENvbnRlbnQpCiB7Ci0gICAgbV9zZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOwot
ICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0VGV4dChwYXN0ZWJvYXJkQ29udGVudC50ZXh0KTsKLSAg
ICBtX3NlbGVjdGlvbkRhdGEtPnNldE1hcmt1cChwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXApOwot
ICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0Q2FuU21hcnRSZXBsYWNlKHBhc3RlYm9hcmRDb250ZW50
LmNhblNtYXJ0Q29weU9yRGVsZXRlKTsKLQotICAgIHdyaXRlVG9DbGlwYm9hcmQoKTsKKyAgICBp
ZiAobV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+Y2xlYXJBbGwo
KTsKKyAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRUZXh0KHBhc3RlYm9hcmRDb250ZW50LnRl
eHQpOworICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldE1hcmt1cChwYXN0ZWJvYXJkQ29udGVu
dC5tYXJrdXApOworICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldENhblNtYXJ0UmVwbGFjZShw
YXN0ZWJvYXJkQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgU2VsZWN0aW9uRGF0YSBkYXRhOworICAgICAgICBkYXRhLnNldFRleHQocGFzdGVib2Fy
ZENvbnRlbnQudGV4dCk7CisgICAgICAgIGRhdGEuc2V0TWFya3VwKHBhc3RlYm9hcmRDb250ZW50
Lm1hcmt1cCk7CisgICAgICAgIGRhdGEuc2V0Q2FuU21hcnRSZXBsYWNlKHBhc3RlYm9hcmRDb250
ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCkt
PnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFtZSwgV1RGTW92ZShk
YXRhKSk7CisgICAgfQogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKIHsKKyAgICBpZiAo
IW1fc2VsZWN0aW9uRGF0YSkgeworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVi
b2FyZFN0cmF0ZWd5KCktPmNsZWFyQ2xpcGJvYXJkKG1fbmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICAvLyBXZSBkbyBub3QgY2xlYXIgZmlsZW5hbWVzLiBBY2NvcmRpbmcgdG8g
dGhlIHNwZWM6ICJUaGUgY2xlYXJEYXRhKCkgbWV0aG9kCiAgICAgLy8gZG9lcyBub3QgYWZmZWN0
IHdoZXRoZXIgYW55IGZpbGVzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIGRyYWcsIHNvIHRoZSB0eXBl
cwogICAgIC8vIGF0dHJpYnV0ZSdzIGxpc3QgbWlnaHQgc3RpbGwgbm90IGJlIGVtcHR5IGFmdGVy
IGNhbGxpbmcgY2xlYXJEYXRhKCkgKGl0IHdvdWxkCiAgICAgLy8gc3RpbGwgY29udGFpbiB0aGUg
IkZpbGVzIiBzdHJpbmcgaWYgYW55IGZpbGVzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIGRyYWcpLiIK
ICAgICBtX3NlbGVjdGlvbkRhdGEtPmNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7Ci0gICAgd3Jp
dGVUb0NsaXBib2FyZCgpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKGNvbnN0IFN0cmlu
ZyYgdHlwZSkKIHsKKyAgICBBU1NFUlQobV9zZWxlY3Rpb25EYXRhKTsKICAgICBzd2l0Y2ggKHNl
bGVjdGlvbkRhdGFUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpKSB7CiAgICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6CiAgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoK
QEAgLTIxNiwxNCArMjI2LDEzIEBAIHZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoY29uc3QgU3RyaW5n
JiB0eXBlKQogICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPmNsZWFyQWxsKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLQotICAgIHdyaXRlVG9DbGlwYm9hcmQoKTsKIH0KIAogYm9vbCBQYXN0ZWJv
YXJkOjpjYW5TbWFydFJlcGxhY2UoKQogewotICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7Ci0gICAg
cmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+Y2FuU21hcnRSZXBsYWNlKCk7CisgICAgaWYgKG1fc2Vs
ZWN0aW9uRGF0YSkKKyAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+Y2FuU21hcnRSZXBs
YWNlKCk7CisgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+dHlwZXMobV9uYW1lKS5jb250YWlucygiYXBwbGljYXRpb24vdm5kLndlYmtpdGd0ay5z
bWFydHBhc3RlIl9zKTsKIH0KIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC0yMzQsMjUg
KzI0Myw1NSBAQCB2b2lkIFBhc3RlYm9hcmQ6OnNldERyYWdJbWFnZShEcmFnSW1hZ2UsIGNvbnN0
IEludFBvaW50JikKIAogdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRQbGFpblRleHQm
IHRleHQsIFBsYWluVGV4dFVSTFJlYWRpbmdQb2xpY3ksIE9wdGlvbmFsPHNpemVfdD4pCiB7Ci0g
ICAgcmVhZEZyb21DbGlwYm9hcmQoKTsKLSAgICB0ZXh0LnRleHQgPSBtX3NlbGVjdGlvbkRhdGEt
PnRleHQoKTsKKyAgICB0ZXh0LnRleHQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPnJlYWRUZXh0RnJvbUNsaXBib2FyZChtX25hbWUpOwogfQogCi12b2lkIFBh
c3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFdlYkNvbnRlbnRSZWFkZXImLCBXZWJDb250ZW50UmVh
ZGluZ1BvbGljeSwgT3B0aW9uYWw8c2l6ZV90PikKK3ZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0
ZWJvYXJkV2ViQ29udGVudFJlYWRlciYgcmVhZGVyLCBXZWJDb250ZW50UmVhZGluZ1BvbGljeSBw
b2xpY3ksIE9wdGlvbmFsPHNpemVfdD4pCiB7CisgICAgYXV0byB0eXBlcyA9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+dHlwZXMobV9uYW1lKTsKKyAgICBpZiAo
dHlwZXMuY29udGFpbnMoInRleHQvaHRtbCJfcykpIHsKKyAgICAgICAgYXV0byBidWZmZXIgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRCdWZmZXJGcm9t
Q2xpcGJvYXJkKG1fbmFtZSwgInRleHQvaHRtbCJfcyk7CisgICAgICAgIGlmIChidWZmZXIgJiYg
cmVhZGVyLnJlYWRIVE1MKFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+
c2l6ZSgpKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHBvbGljeSA9
PSBXZWJDb250ZW50UmVhZGluZ1BvbGljeTo6T25seVJpY2hUZXh0VHlwZXMpCisgICAgICAgIHJl
dHVybjsKKworICAgIHN0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwgaW1hZ2VUeXBlc1tdID0geyAi
aW1hZ2UvcG5nIl9zLCAiaW1hZ2UvanBlZyJfcywgImltYWdlL2dpZiJfcywgImltYWdlL2JtcCJf
cywgImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiJfcywgImltYWdlL3gtaWNvbiJfcyB9OworICAg
IGZvciAoY29uc3QgYXV0byYgaW1hZ2VUeXBlIDogaW1hZ2VUeXBlcykgeworICAgICAgICBpZiAo
dHlwZXMuY29udGFpbnMoaW1hZ2VUeXBlKSkgeworICAgICAgICAgICAgYXV0byBidWZmZXIgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRCdWZmZXJGcm9t
Q2xpcGJvYXJkKG1fbmFtZSwgaW1hZ2VUeXBlKTsKKyAgICAgICAgICAgIGlmICghYnVmZmVyLT5p
c0VtcHR5KCkgJiYgcmVhZGVyLnJlYWRJbWFnZShidWZmZXIucmVsZWFzZU5vbk51bGwoKSwgaW1h
Z2VUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAocG9saWN5ID09IFdlYkNvbnRlbnRSZWFkaW5nUG9saWN5OjpBbnlUeXBlICYmIHR5cGVz
LmNvbnRhaW5zKCJ0ZXh0L3VyaS1saXN0Il9zKSkgeworICAgICAgICBhdXRvIGZpbGVQYXRocyA9
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZEZpbGVQYXRo
c0Zyb21DbGlwYm9hcmQobV9uYW1lKTsKKyAgICAgICAgaWYgKHJlYWRlci5yZWFkRmlsZVBhdGhz
KGZpbGVQYXRocykpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHR5cGVz
LmNvbnRhaW5zKCJ0ZXh0L3BsYWluIl9zKSB8fCB0eXBlcy5jb250YWlucygidGV4dC9wbGFpbjtj
aGFyc2V0PXV0Zi04Il9zKSkgeworICAgICAgICBhdXRvIHRleHQgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRUZXh0RnJvbUNsaXBib2FyZChtX25hbWUp
OworICAgICAgICBpZiAoIXRleHQuaXNOdWxsKCkgJiYgcmVhZGVyLnJlYWRQbGFpblRleHQodGV4
dCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OnJl
YWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikKIHsKLSAgICByZWFkRnJvbUNsaXBib2Fy
ZCgpOwotICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBtX3NlbGVjdGlvbkRhdGEtPmZpbGVuYW1l
cygpKQotICAgICAgICByZWFkZXIucmVhZEZpbGVuYW1lKGZpbGVuYW1lKTsKKyAgICBhdXRvIGZp
bGVQYXRocyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVh
ZEZpbGVQYXRoc0Zyb21DbGlwYm9hcmQobV9uYW1lKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGZp
bGVQYXRoIDogZmlsZVBhdGhzKQorICAgICAgICByZWFkZXIucmVhZEZpbGVuYW1lKGZpbGVQYXRo
KTsKIH0KIAogYm9vbCBQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKIHsKLSAgICByZWFkRnJvbUNsaXBi
b2FyZCgpOwotICAgIHJldHVybiBtX3NlbGVjdGlvbkRhdGEtPmhhc1RleHQoKSB8fCBtX3NlbGVj
dGlvbkRhdGEtPmhhc01hcmt1cCgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzVVJJTGlzdCgpIHx8
IG1fc2VsZWN0aW9uRGF0YS0+aGFzSW1hZ2UoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc1Vua25v
d25UeXBlRGF0YSgpOworICAgIGlmIChtX3NlbGVjdGlvbkRhdGEpCisgICAgICAgIHJldHVybiBt
X3NlbGVjdGlvbkRhdGEtPmhhc1RleHQoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc01hcmt1cCgp
IHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzVVJJTGlzdCgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFz
SW1hZ2UoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc1Vua25vd25UeXBlRGF0YSgpOworICAgIHJl
dHVybiAhcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBlcyht
X25hbWUpLmlzRW1wdHkoKTsKIH0KIAogVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNT
YWZlRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJikKQEAgLTI2Myw3ICszMDIsOCBAQCBWZWN0b3I8
U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmKQog
CiBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdz
KCkKIHsKLSAgICByZWFkRnJvbUNsaXBib2FyZCgpOworICAgIGlmICghbV9zZWxlY3Rpb25EYXRh
KQorICAgICAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT50eXBlcyhtX25hbWUpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAgICAgaWYg
KG1fc2VsZWN0aW9uRGF0YS0+aGFzVGV4dCgpKSB7CkBAIC0yOTQsNyArMzM0LDEzIEBAIFN0cmlu
ZyBQYXN0ZWJvYXJkOjpyZWFkT3JpZ2luKCkKIAogU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJp
bmcoY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7CisgICAg
aWYgKCFtX3NlbGVjdGlvbkRhdGEpIHsKKyAgICAgICAgaWYgKHR5cGUuc3RhcnRzV2l0aCgidGV4
dC9wbGFpbiIpKQorICAgICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZFRleHRGcm9tQ2xpcGJvYXJkKG1fbmFtZSk7CisKKyAgICAg
ICAgYXV0byBidWZmZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPnJlYWRCdWZmZXJGcm9tQ2xpcGJvYXJkKG1fbmFtZSwgdHlwZSk7CisgICAgICAgIHJldHVy
biBidWZmZXIgPyBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUo
KSkgOiBTdHJpbmcoKTsKKyAgICB9CiAKICAgICBzd2l0Y2ggKHNlbGVjdGlvbkRhdGFUeXBlRnJv
bUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpKSB7CiAgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVS
SUxpc3Q6CkBAIC0zMTEsNyArMzU3LDcgQEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmco
Y29uc3QgU3RyaW5nJiB0eXBlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRT
dHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJikKQEAgLTMyMiw4ICszNjgsMTcgQEAgU3Ry
aW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJikKIAog
UGFzdGVib2FyZDo6RmlsZUNvbnRlbnRTdGF0ZSBQYXN0ZWJvYXJkOjpmaWxlQ29udGVudFN0YXRl
KCkKIHsKLSAgICByZWFkRnJvbUNsaXBib2FyZCgpOwotICAgIHJldHVybiBtX3NlbGVjdGlvbkRh
dGEtPmZpbGVuYW1lcygpLmlzRW1wdHkoKSA/IEZpbGVDb250ZW50U3RhdGU6Ok5vRmlsZU9ySW1h
Z2VEYXRhIDogRmlsZUNvbnRlbnRTdGF0ZTo6TWF5Q29udGFpbkZpbGVQYXRoczsKKyAgICBpZiAo
bV9zZWxlY3Rpb25EYXRhKQorICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb25EYXRhLT5maWxlbmFt
ZXMoKS5pc0VtcHR5KCkgPyBGaWxlQ29udGVudFN0YXRlOjpOb0ZpbGVPckltYWdlRGF0YSA6IEZp
bGVDb250ZW50U3RhdGU6Ok1heUNvbnRhaW5GaWxlUGF0aHM7CisKKyAgICBhdXRvIHR5cGVzID0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBlcyhtX25hbWUp
OworICAgIGlmICh0eXBlcy5jb250YWlucygidGV4dC91cmktbGlzdCJfcykpCisgICAgICAgIHJl
dHVybiBGaWxlQ29udGVudFN0YXRlOjpNYXlDb250YWluRmlsZVBhdGhzOworCisgICAgYXV0byBy
ZXN1bHQgPSB0eXBlcy5maW5kTWF0Y2hpbmcoW10oY29uc3QgU3RyaW5nJiB0eXBlKSB7CisgICAg
ICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUodHlw
ZSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdCA9PSBub3RGb3VuZCA/IEZpbGVDb250ZW50
U3RhdGU6Ok5vRmlsZU9ySW1hZ2VEYXRhIDogRmlsZUNvbnRlbnRTdGF0ZTo6TWF5Q29udGFpbkZp
bGVQYXRoczsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZU1hcmt1cChjb25zdCBTdHJpbmcm
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxw
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3Bw
CmluZGV4IDU3NDk2NmE1OWZiZi4uNTFjOGQ5OGQyOGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25EYXRhLmgiCiAjaW5j
bHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2luY2x1ZGUg
PHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
QEAgLTk2LDQxICs5NSw2IEBAIHN0YXRpYyBTdHJpbmcgc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmlu
ZyhHdGtTZWxlY3Rpb25EYXRhKiBkYXRhKQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KG1h
cmt1cFN0cmluZy5nZXQoKSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Z2V0Q2xpcGJv
YXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIFNlbGVjdGlvbkRhdGEmIHNlbGVj
dGlvbikKLXsKLSAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RleHRfYXZhaWxhYmxlKGNs
aXBib2FyZCkpIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gdGV4dERhdGEoZ3RrX2NsaXBi
b2FyZF93YWl0X2Zvcl90ZXh0KGNsaXBib2FyZCkpOwotICAgICAgICBpZiAodGV4dERhdGEpCi0g
ICAgICAgICAgICBzZWxlY3Rpb24uc2V0VGV4dChTdHJpbmc6OmZyb21VVEY4KHRleHREYXRhLmdl
dCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRfYXZh
aWxhYmxlKGNsaXBib2FyZCwgbWFya3VwQXRvbSkpIHsKLSAgICAgICAgaWYgKEd0a1NlbGVjdGlv
bkRhdGEqIGRhdGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2FyZCwg
bWFya3VwQXRvbSkpIHsKLSAgICAgICAgICAgIFN0cmluZyBtYXJrdXAoc2VsZWN0aW9uRGF0YVRv
VVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgICAgICAgICByZW1vdmVNYXJrdXBQcmVmaXgobWFya3Vw
KTsKLSAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRNYXJrdXAobWFya3VwKTsKLSAgICAgICAgICAg
IGd0a19zZWxlY3Rpb25fZGF0YV9mcmVlKGRhdGEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBib2FyZCwgdXJp
TGlzdEF0b20pKSB7Ci0gICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2Ns
aXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIHVyaUxpc3RBdG9tKSkgewotICAg
ICAgICAgICAgc2VsZWN0aW9uLnNldFVSSUxpc3Qoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhk
YXRhKSk7Ci0gICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfZnJlZShkYXRhKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfaW1hZ2VfYXZhaWxh
YmxlKGNsaXBib2FyZCkpIHsKLSAgICAgICAgaWYgKEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYg
PSBhZG9wdEdSZWYoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9pbWFnZShjbGlwYm9hcmQpKSkgewot
ICAgICAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGFkb3B0UmVmKGdk
a19jYWlyb19zdXJmYWNlX2NyZWF0ZV9mcm9tX3BpeGJ1ZihwaXhidWYuZ2V0KCksIDEsIG51bGxw
dHIpKTsKLSAgICAgICAgICAgIFJlZjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRl
KFdURk1vdmUoc3VyZmFjZSkpOwotICAgICAgICAgICAgc2VsZWN0aW9uLnNldEltYWdlKGltYWdl
LnB0cigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNlbGVjdGlvbi5zZXRDYW5TbWFydFJl
cGxhY2UoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xpcGJvYXJkLCBz
bWFydFBhc3RlQXRvbSkpOwotfQotCiBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IFBhc3RlYm9hcmRI
ZWxwZXI6OnRhcmdldExpc3RGb3JTZWxlY3Rpb25EYXRhKGNvbnN0IFNlbGVjdGlvbkRhdGEmIHNl
bGVjdGlvbikKIHsKICAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IGxpc3QgPSBhZG9wdEdSZWYo
Z3RrX3RhcmdldF9saXN0X25ldyhudWxscHRyLCAwKSk7CkBAIC0yNjUsNTcgKzIyOSw2IEBAIFZl
Y3RvcjxHZGtBdG9tPiBQYXN0ZWJvYXJkSGVscGVyOjpkcm9wQXRvbXNGb3JDb250ZXh0KEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtEcmFnCiAgICAgcmV0dXJuIGRyb3BBdG9tczsKIH0KIAotc3RhdGlj
IFNlbGVjdGlvbkRhdGEqIHNldHRpbmdDbGlwYm9hcmRTZWxlY3Rpb247Ci0KLXN0cnVjdCBDbGlw
Ym9hcmRTZXREYXRhIHsKLSAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
Q2xpcGJvYXJkU2V0RGF0YShTZWxlY3Rpb25EYXRhJiBzZWxlY3Rpb24sIFdURjo6RnVuY3Rpb248
dm9pZCgpPiYmIHNlbGVjdGlvbkNsZWFyZWRDYWxsYmFjaykKLSAgICAgICAgOiBzZWxlY3Rpb25E
YXRhKHNlbGVjdGlvbikKLSAgICAgICAgLCBzZWxlY3Rpb25DbGVhcmVkQ2FsbGJhY2soV1RGTW92
ZShzZWxlY3Rpb25DbGVhcmVkQ2FsbGJhY2spKQotICAgIHsKLSAgICB9Ci0KLSAgICB+Q2xpcGJv
YXJkU2V0RGF0YSgpID0gZGVmYXVsdDsKLQotICAgIFJlZjxTZWxlY3Rpb25EYXRhPiBzZWxlY3Rp
b25EYXRhOwotICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBzZWxlY3Rpb25DbGVhcmVkQ2FsbGJh
Y2s7Ci19OwotCi1zdGF0aWMgdm9pZCBnZXRDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrKEd0a0Ns
aXBib2FyZCosIEd0a1NlbGVjdGlvbkRhdGEgKnNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGdw
b2ludGVyIHVzZXJEYXRhKQotewotICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxDbGlwYm9h
cmRTZXREYXRhKj4odXNlckRhdGEpOwotICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigp
LmZpbGxTZWxlY3Rpb25EYXRhKGRhdGEtPnNlbGVjdGlvbkRhdGEsIGluZm8sIHNlbGVjdGlvbkRh
dGEpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhckNsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2soR3Rr
Q2xpcGJvYXJkKiwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENs
aXBib2FyZFNldERhdGE+IGRhdGEoc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkU2V0RGF0YSo+KHVzZXJE
YXRhKSk7Ci0gICAgaWYgKGRhdGEtPnNlbGVjdGlvbkNsZWFyZWRDYWxsYmFjaykKLSAgICAgICAg
ZGF0YS0+c2VsZWN0aW9uQ2xlYXJlZENhbGxiYWNrKCk7Ci19Ci0KLXZvaWQgUGFzdGVib2FyZEhl
bHBlcjo6d3JpdGVDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgY29u
c3QgU2VsZWN0aW9uRGF0YSYgc2VsZWN0aW9uLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBwcmlt
YXJ5U2VsZWN0aW9uQ2xlYXJlZCkKLXsKLSAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IGxpc3Qg
PSB0YXJnZXRMaXN0Rm9yU2VsZWN0aW9uRGF0YShzZWxlY3Rpb24pOwotCi0gICAgaW50IG51bWJl
ck9mVGFyZ2V0czsKLSAgICBHdGtUYXJnZXRFbnRyeSogdGFibGUgPSBndGtfdGFyZ2V0X3RhYmxl
X25ld19mcm9tX2xpc3QobGlzdC5nZXQoKSwgJm51bWJlck9mVGFyZ2V0cyk7Ci0KLSAgICBpZiAo
bnVtYmVyT2ZUYXJnZXRzID4gMCAmJiB0YWJsZSkgewotICAgICAgICBTZXRGb3JTY29wZTxTZWxl
Y3Rpb25EYXRhKj4gY2hhbmdlKHNldHRpbmdDbGlwYm9hcmRTZWxlY3Rpb24sIGNvbnN0X2Nhc3Q8
U2VsZWN0aW9uRGF0YSo+KCZzZWxlY3Rpb24pKTsKLSAgICAgICAgYXV0byBkYXRhID0gbWFrZVVu
aXF1ZTxDbGlwYm9hcmRTZXREYXRhPigqc2V0dGluZ0NsaXBib2FyZFNlbGVjdGlvbiwgV1RGTW92
ZShwcmltYXJ5U2VsZWN0aW9uQ2xlYXJlZCkpOwotICAgICAgICBpZiAoZ3RrX2NsaXBib2FyZF9z
ZXRfd2l0aF9kYXRhKGNsaXBib2FyZCwgdGFibGUsIG51bWJlck9mVGFyZ2V0cywgZ2V0Q2xpcGJv
YXJkQ29udGVudHNDYWxsYmFjaywgY2xlYXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLCBkYXRh
LmdldCgpKSkgewotICAgICAgICAgICAgZ3RrX2NsaXBib2FyZF9zZXRfY2FuX3N0b3JlKGNsaXBi
b2FyZCwgbnVsbHB0ciwgMCk7Ci0gICAgICAgICAgICAvLyBXaGVuIGd0a19jbGlwYm9hcmRfc2V0
X3dpdGhfZGF0YSgpIHN1Y2NlZWRzIGNsZWFyQ2xpcGJvYXJkQ29udGVudHNDYWxsYmFjayB0YWtl
cyB0aGUgb3duZXJzaGlwIG9mIGRhdGEsIHNvIHdlIGxlYWsgaXQgaGVyZS4KLSAgICAgICAgICAg
IGRhdGEucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIGd0a19jbGlw
Ym9hcmRfY2xlYXIoY2xpcGJvYXJkKTsKLQotICAgIGlmICh0YWJsZSkKLSAgICAgICAgZ3RrX3Rh
cmdldF90YWJsZV9mcmVlKHRhYmxlLCBudW1iZXJPZlRhcmdldHMpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyAhVVNFKEdUSzQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaAppbmRleCA0YzNmNDUxMDgxZTYuLjU1OWI2
NjcwZTBiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRIZWxwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhl
bHBlci5oCkBAIC00MCwxNSArNDAsMTEgQEAgY2xhc3MgUGFzdGVib2FyZEhlbHBlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3RlYm9hcmRIZWxwZXImIHNpbmdsZXRvbigpOwogCi0gICAgZW51
bSBTbWFydFBhc3RlSW5jbHVzaW9uIHsgSW5jbHVkZVNtYXJ0UGFzdGUsIERvTm90SW5jbHVkZVNt
YXJ0UGFzdGUgfTsKLQogICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExpc3QoKSBjb25zdDsKICAg
ICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IHRhcmdldExpc3RGb3JTZWxlY3Rpb25EYXRhKGNvbnN0
IFNlbGVjdGlvbkRhdGEmKTsKICAgICB2b2lkIGZpbGxTZWxlY3Rpb25EYXRhKGNvbnN0IFNlbGVj
dGlvbkRhdGEmLCB1bnNpZ25lZCwgR3RrU2VsZWN0aW9uRGF0YSopOwogICAgIHZvaWQgZmlsbFNl
bGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9uRGF0YSosIHVuc2lnbmVkLCBTZWxlY3Rpb25EYXRhJik7
CiAgICAgVmVjdG9yPEdka0F0b20+IGRyb3BBdG9tc0ZvckNvbnRleHQoR3RrV2lkZ2V0KiwgR2Rr
RHJhZ0NvbnRleHQqKTsKLSAgICB2b2lkIHdyaXRlQ2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJv
YXJkKiwgY29uc3QgU2VsZWN0aW9uRGF0YSYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIHByaW1h
cnlTZWxlY3Rpb25DbGVhcmVkID0gbnVsbHB0cik7Ci0gICAgdm9pZCBnZXRDbGlwYm9hcmRDb250
ZW50cyhHdGtDbGlwYm9hcmQqLCBTZWxlY3Rpb25EYXRhJik7CiAKICAgICBlbnVtIFBhc3RlYm9h
cmRUYXJnZXRUeXBlIHsgVGFyZ2V0VHlwZU1hcmt1cCwgVGFyZ2V0VHlwZVRleHQsIFRhcmdldFR5
cGVJbWFnZSwgVGFyZ2V0VHlwZVVSSUxpc3QsIFRhcmdldFR5cGVOZXRzY2FwZVVSTCwgVGFyZ2V0
VHlwZVNtYXJ0UGFzdGUsIFRhcmdldFR5cGVVbmtub3duIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVBhc3RlYm9hcmRHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtUGFzdGVib2FyZEd0ay5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjOTdlOWZmM2ZjMC4uMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVBhc3RlYm9hcmRHdGsuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTYgUmVk
IEhhdCBJbmMuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1QYXN0ZWJvYXJkLmgiCi0KLSNpbmNsdWRlICJDb2xv
ci5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25E
YXRhLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPHd0Zi9VUkwuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEdU
SzQpCi1QbGF0Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3JtUGFzdGVib2FyZChjb25zdCBTdHJpbmcm
KQotewotfQotI2Vsc2UKLVBsYXRmb3JtUGFzdGVib2FyZDo6UGxhdGZvcm1QYXN0ZWJvYXJkKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCi0gICAgOiBtX2NsaXBib2FyZChndGtfY2xpcGJv
YXJkX2dldChnZGtfYXRvbV9pbnRlcm4ocGFzdGVib2FyZE5hbWUudXRmOCgpLmRhdGEoKSwgVFJV
RSkpKQotewotICAgIEFTU0VSVChtX2NsaXBib2FyZCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBQbGF0
Zm9ybVBhc3RlYm9hcmQ6OndyaXRlVG9DbGlwYm9hcmQoY29uc3QgU2VsZWN0aW9uRGF0YSYgc2Vs
ZWN0aW9uLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBwcmltYXJ5U2VsZWN0aW9uQ2xlYXJlZCkK
LXsKLSNpZiAhVVNFKEdUSzQpCi0gICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkud3Jp
dGVDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCwgc2VsZWN0aW9uLCBndGtfY2xpcGJvYXJk
X2dldChHREtfU0VMRUNUSU9OX1BSSU1BUlkpID09IG1fY2xpcGJvYXJkID8gV1RGTW92ZShwcmlt
YXJ5U2VsZWN0aW9uQ2xlYXJlZCkgOiBudWxscHRyKTsKLSNlbmRpZgotfQotCi1SZWY8U2VsZWN0
aW9uRGF0YT4gUGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkRnJvbUNsaXBib2FyZCgpCi17Ci0gICAg
UmVmPFNlbGVjdGlvbkRhdGE+IHNlbGVjdGlvbihTZWxlY3Rpb25EYXRhOjpjcmVhdGUoKSk7Ci0j
aWYgIVVTRShHVEs0KQotICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLmdldENsaXBi
b2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkLCBzZWxlY3Rpb24uZ2V0KCkpOwotI2VuZGlmCi0gICAg
cmV0dXJuIHNlbGVjdGlvbjsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGxhdGZvcm1QYXN0ZWJvYXJk
Ojp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmKSBjb25zdAotewot
ICAgIHJldHVybiB7IH07Ci19Ci0KLWludDY0X3QgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShj
b25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludDY0
X3QgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBWZWN0b3I8UGFzdGVib2FyZEN1c3Rv
bURhdGE+JikKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1NlbGVjdGlvbkRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1NlbGVjdGlvbkRhdGEuY3BwCmluZGV4IDgyZmU0NzFhNTljMS4uZTg0YzM1ZGMz
ZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VsZWN0aW9uRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1NlbGVjdGlvbkRhdGEuY3Bw
CkBAIC04MCw3ICs4MCwxMSBAQCB2b2lkIFNlbGVjdGlvbkRhdGE6OnNldFVSTChjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKIHsKICAgICBtX3VybCA9IHVybDsKICAgICBtX3Vy
aUxpc3QgPSB1cmw7Ci0gICAgc2V0VGV4dCh1cmwuc3RyaW5nKCkpOworICAgIGlmICghaGFzVGV4
dCgpKQorICAgICAgICBzZXRUZXh0KHVybC5zdHJpbmcoKSk7CisKKyAgICBpZiAoaGFzTWFya3Vw
KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBhY3R1YWxMYWJlbChsYWJlbCk7CiAg
ICAgaWYgKGFjdHVhbExhYmVsLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOWE4MjRlZDg2N2FiLi45
ZTJkYTgxOWZmOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMjAtMDUtMDYgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFJl
d29yayBjbGlwYm9hcmQgaGFuZGxpbmcgaW4gcHJlcGFyYXRpb24gZm9yIEdUSzQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTUxMQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBhc3luYyBBUElzIHRv
IGF2b2lkIGJsb2NraW5nIHRoZSBVSSBwcm9jZXNzIGR1cmluZyB0aGUgY29tbXVuaWNhdGlvbiB3
aXRoIHRoZSBjbGlwYm9hcmQuIEluIEdUSzQgb25seSBhc3luYworICAgICAgICBBUElzIGFyZSBh
dmFpbGFibGUuIEFkZCBDbGlwYm9hcmQgY2xhc3MgdG8gaGFuZGxlIHRoZSBjb21tdW5pY2F0aW9u
IHdpdGggdGhlIGNsaXBib2FyZCB3aXRoIHRoZSBHVEsKKyAgICAgICAgaW1wbGVtZW50YXRpb24g
aW4gQ2xpcGJvYXJkR3RrMyBhbmQgQ2xpcGJvYXJkR3RrNCBmaWxlcy4KKworICAgICAgICAqIFNo
YXJlZC9ndGsvV2ViU2VsZWN0aW9uRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNlbGVj
dGlvbkRhdGE6OldlYlNlbGVjdGlvbkRhdGEpOiBBZGQgY29uc3RydWN0b3IgcmVjZWl2bmlnIGFu
IHJ2YWx1ZSByZWZlcmVuY2UuCisgICAgICAgICogU2hhcmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRh
Lmg6CisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
c3RlYm9hcmRQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHku
bWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6Y2xpcGJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6cHJpbWFy
eSk6CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6Z2V0KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL0NsaXBib2FyZC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0NsaXBi
b2FyZEd0azMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpDbGlwYm9h
cmQpOgorICAgICAgICAoV2ViS2l0Ojppc1ByaW1hcnlDbGlwYm9hcmQpOgorICAgICAgICAoV2Vi
S2l0OjpDbGlwYm9hcmQ6OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpGb3JtYXRzQXN5
bmNEYXRhOjpGb3JtYXRzQXN5bmNEYXRhKToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpm
b3JtYXRzKToKKyAgICAgICAgKFdlYktpdDo6UmVhZFRleHRBc3luY0RhdGE6OlJlYWRUZXh0QXN5
bmNEYXRhKToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpyZWFkVGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OlJlYWRGaWxlUGF0aHNBc3luY0RhdGE6OlJlYWRGaWxlUGF0aHNBc3luY0RhdGEp
OgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OnJlYWRGaWxlUGF0aHMpOgorICAgICAgICAo
V2ViS2l0OjpSZWFkQnVmZmVyQXN5bmNEYXRhOjpSZWFkQnVmZmVyQXN5bmNEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6Q2xp
cGJvYXJkOjp3cml0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6Y2xlYXIpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrNC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpDbGlwYm9hcmQ6OkNsaXBib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2Fy
ZDo6dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6Zm9ybWF0cyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6cmVhZFRleHQpOgorICAgICAgICAoV2ViS2l0OjpD
bGlwYm9hcmQ6OnJlYWRGaWxlUGF0aHMpOgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OnJl
YWRCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OndyaXRlKToKKyAgICAgICAg
KFdlYktpdDo6Q2xpcGJvYXJkOjpjbGVhcik6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJQ
YXN0ZWJvYXJkUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OmdldFR5cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpyZWFk
VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEZpbGVQYXRo
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVUb0NsaXBib2FyZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6Y2xlYXJDbGlwYm9hcmQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmRpZENsZWFyUHJpbWFyeVNlbGVjdGlv
bik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnR5cGVz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkVGV4dEZyb21D
bGlwYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRG
aWxlUGF0aHNGcm9tQ2xpcGJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpyZWFkQnVmZmVyRnJvbUNsaXBib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBs
YXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb0NsaXBib2FyZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y2xlYXJDbGlwYm9hcmQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6CisKIDIwMjAtMDUtMDIg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgaGFuZGxl
V2hlZWxFdmVudFBoYXNlKCkgc2hvdWxkIGluY2x1ZGUgdGhlIHJlbGV2YW50IFNjcm9sbGluZ05v
ZGVJRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRh
dGEuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEuY3BwCmlu
ZGV4IDE5ZmMyNGFjNjlkNi4uOWI1MDZiMzViM2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9ndGsvV2ViU2VsZWN0aW9uRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEuY3BwCkBAIC00MSw2ICs0MSwxMSBAQCBXZWJTZWxlY3Rp
b25EYXRhOjpXZWJTZWxlY3Rpb25EYXRhKFJlZjxXZWJDb3JlOjpTZWxlY3Rpb25EYXRhPiYmIGRh
dGEpCiB7CiB9CiAKK1dlYlNlbGVjdGlvbkRhdGE6OldlYlNlbGVjdGlvbkRhdGEoV2ViQ29yZTo6
U2VsZWN0aW9uRGF0YSYmIGRhdGEpCisgICAgOiBzZWxlY3Rpb25EYXRhKGRhdGEpCit7Cit9CisK
IHZvaWQgV2ViU2VsZWN0aW9uRGF0YTo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIHsKICAgICBlbmNvZGVyIDw8IHNlbGVjdGlvbkRhdGEuZ2V0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvV2ViU2VsZWN0aW9uRGF0YS5oIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEuaAppbmRleCBkZDZkYWFlNDA4MzkuLjIwNWY4
ZWVjMDJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVjdGlv
bkRhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvV2ViU2VsZWN0aW9uRGF0YS5o
CkBAIC0zMSw2ICszMSw3IEBAIHN0cnVjdCBXZWJTZWxlY3Rpb25EYXRhIHsKICAgICBXZWJTZWxl
Y3Rpb25EYXRhKCk7CiAgICAgZXhwbGljaXQgV2ViU2VsZWN0aW9uRGF0YShjb25zdCBXZWJDb3Jl
OjpTZWxlY3Rpb25EYXRhJik7CiAgICAgZXhwbGljaXQgV2ViU2VsZWN0aW9uRGF0YShSZWY8V2Vi
Q29yZTo6U2VsZWN0aW9uRGF0YT4mJik7CisgICAgZXhwbGljaXQgV2ViU2VsZWN0aW9uRGF0YShX
ZWJDb3JlOjpTZWxlY3Rpb25EYXRhJiYpOwogCiAgICAgUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRh
dGE+IHNlbGVjdGlvbkRhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dU
Sy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IDNmYmNiNDE0ODQ1MC4u
ZGRiZjA2ZDQxN2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKQEAgLTI1Myw2ICsyNTMsOSBAQCBVSVBy
b2Nlc3MvZ3N0cmVhbWVyL1dlYlBhZ2VQcm94eUdTdHJlYW1lci5jcHAKIFVJUHJvY2Vzcy9ndGsv
QWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9BY2Nl
bGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9B
Y2NlbGVyYXRlZEJhY2tpbmdTdG9yZVgxMS5jcHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvZ3RrL0Ns
aXBib2FyZC5jcHAKK1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrMy5jcHAKK1VJUHJvY2Vzcy9n
dGsvQ2xpcGJvYXJkR3RrNC5jcHAKIFVJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNw
cAogVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9ndGsvSGFy
ZHdhcmVBY2NlbGVyYXRpb25NYW5hZ2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYXN0ZWJvYXJkUHJveHkuaAppbmRleCA0NzBmNTk5ZTAzZGUuLjI2MWZhZDYxYTYyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKQEAgLTM0LDYg
KzM0LDEwIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha0hh
c2hTZXQuaD4KIAorbmFtZXNwYWNlIElQQyB7CitjbGFzcyBTaGFyZWRCdWZmZXJEYXRhUmVmZXJl
bmNlOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIFBhc3Rl
Ym9hcmRDdXN0b21EYXRhOwpAQCAtNjYsNiArNzAsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9S
TShHVEspCiAgICAgdm9pZCBzZXRQcmltYXJ5U2VsZWN0aW9uT3duZXIoV2ViRnJhbWVQcm94eSop
OworICAgIHZvaWQgZGlkQ2xlYXJQcmltYXJ5U2VsZWN0aW9uKCk7CiAgICAgdm9pZCBkaWREZXN0
cm95RnJhbWUoV2ViRnJhbWVQcm94eSopOwogI2VuZGlmCiAKQEAgLTExOCw4ICsxMjMsMTIgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHVybFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyhJUEM6OkNvbm5l
Y3Rpb24mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFN0cmluZyYmIHVybCwgU3RyaW5nJiYgdGl0bGUpPiYmKTsKIAogI2lmIFBMQVRGT1JNKEdU
SykKKyAgICB2b2lkIGdldFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOworICAgIHZvaWQgcmVhZFRl
eHQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
dHJpbmcmJik+JiYpOworICAgIHZvaWQgcmVhZEZpbGVQYXRocyhjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsK
KyAgICB2b2lkIHJlYWRCdWZmZXIoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OlNoYXJl
ZEJ1ZmZlckRhdGFSZWZlcmVuY2UmJik+JiYpOwogICAgIHZvaWQgd3JpdGVUb0NsaXBib2FyZChj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBXZWJTZWxlY3Rpb25EYXRhJik7Ci0g
ICAgdm9pZCByZWFkRnJvbUNsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYlNlbGVjdGlvbkRhdGEmJik+JiYpOworICAgIHZvaWQg
Y2xlYXJDbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7CiAKICAgICBXZWJG
cmFtZVByb3h5KiBtX3ByaW1hcnlTZWxlY3Rpb25Pd25lciB7IG51bGxwdHIgfTsKICAgICBXZWJG
cmFtZVByb3h5KiBtX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkIHsgbnVsbHB0ciB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2Vz
LmluCmluZGV4IDg4YzMwNjA5ODkwNS4uN2ZkNzY3ZmVhN2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC02
MSw4ICs2MSwxMiBAQCBtZXNzYWdlcyAtPiBXZWJQYXN0ZWJvYXJkUHJveHkgTm90UmVmQ291bnRl
ZCB7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHZXRUeXBlcyhTdHJpbmcgcGFz
dGVib2FyZE5hbWUpIC0+IChWZWN0b3I8U3RyaW5nPiB0eXBlcykgU3luY2hyb25vdXMKKyAgICBS
ZWFkVGV4dChTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChTdHJpbmcgdGV4dCkgU3luY2hyb25v
dXMKKyAgICBSZWFkRmlsZVBhdGhzKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKFZlY3RvcjxT
dHJpbmc+IHR5cGVzKSBTeW5jaHJvbm91cworICAgIFJlYWRCdWZmZXIoU3RyaW5nIHBhc3RlYm9h
cmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChJUEM6OlNoYXJlZEJ1ZmZlckRhdGFS
ZWZlcmVuY2UgZGF0YSkgU3luY2hyb25vdXMKICAgICBXcml0ZVRvQ2xpcGJvYXJkKFN0cmluZyBw
YXN0ZWJvYXJkTmFtZSwgc3RydWN0IFdlYktpdDo6V2ViU2VsZWN0aW9uRGF0YSBwYXN0ZWJvYXJk
Q29udGVudCkKLSAgICBSZWFkRnJvbUNsaXBib2FyZChTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+
IChzdHJ1Y3QgV2ViS2l0OjpXZWJTZWxlY3Rpb25EYXRhIHBhc3RlYm9hcmRDb250ZW50KSBTeW5j
aHJvbm91cworICAgIENsZWFyQ2xpcGJvYXJkKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkKICNlbmRp
ZgogCiAjaWYgVVNFKExJQldQRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9DbGlwYm9hcmQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2Fy
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNDk3NTM3NjAy
NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJv
YXJkLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIENsaXBib2FyZCYgY2xpcGJvYXJkKCkK
K3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIExhenlO
ZXZlckRlc3Ryb3llZDxDbGlwYm9hcmQ+IG9iamVjdDsKKworICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2VGbGFnLCBbXSB7CisgICAgICAgIG9iamVjdC5jb25zdHJ1Y3QoQ2xpcGJvYXJkOjpUeXBlOjpD
bGlwYm9hcmQpOworICAgIH0pOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIENs
aXBib2FyZCYgcHJpbWFyeSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFn
OworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8Q2xpcGJvYXJkPiBvYmplY3Q7CisKKyAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBvYmplY3QuY29uc3RydWN0
KENsaXBib2FyZDo6VHlwZTo6UHJpbWFyeSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gb2JqZWN0
OworfQorCitDbGlwYm9hcmQmIENsaXBib2FyZDo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBpZiAobmFtZSA9PSAiQ0xJUEJPQVJEIikKKyAgICAgICAgcmV0dXJuIGNsaXBib2FyZCgp
OworCisgICAgaWYgKG5hbWUgPT0gIlBSSU1BUlkiKQorICAgICAgICByZXR1cm4gcHJpbWFyeSgp
OworCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJv
YXJkLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ZTk5OTE0M2U2OGIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmgKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworI2lmICFVU0UoR1RLNCkK
K3R5cGVkZWYgc3RydWN0IF9HdGtDbGlwYm9hcmQgR3RrQ2xpcGJvYXJkOworI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNlbGVjdGlvbkRhdGE7CitjbGFzcyBTaGFyZWRCdWZm
ZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDbGlwYm9hcmQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKENsaXBib2FyZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIHN0YXRpYyBDbGlwYm9hcmQmIGdldChjb25zdCBTdHJpbmcmIG5hbWUpOwor
CisgICAgZW51bSBjbGFzcyBUeXBlIHsgQ2xpcGJvYXJkLCBQcmltYXJ5IH07CisgICAgZXhwbGlj
aXQgQ2xpcGJvYXJkKFR5cGUpOworCisgICAgVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBm
b3JtYXRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOworICAg
IHZvaWQgcmVhZFRleHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOworICAg
IHZvaWQgcmVhZEZpbGVQYXRocyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmKTsKKyAgICB2b2lkIHJlYWRCdWZmZXIoY29uc3QgY2hhciosIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJik+JiYpOworICAgIHZvaWQgd3Jp
dGUoY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uRGF0YSYpOworICAgIHZvaWQgY2xlYXIoKTsKKwor
cHJpdmF0ZToKKyNpZiAhVVNFKEdUSzQpCisgICAgR3RrQ2xpcGJvYXJkKiBtX2NsaXBib2FyZCB7
IG51bGxwdHIgfTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrMy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrMy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZGYyOWQxYjk4ZWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrMy5jcHAKQEAgLTAsMCAr
MSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisKKyNpZiAhVVNFKEdU
SzQpCisKKyNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0dSZWZQdHJHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NlbGVjdGlvbkRhdGEuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK0NsaXBib2FyZDo6Q2xpcGJvYXJkKFR5cGUgdHlwZSkKKyAgICA6
IG1fY2xpcGJvYXJkKGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCksIHR5cGUgPT0gVHlwZTo6Q2xpcGJvYXJkID8gR0RLX1NFTEVDVElPTl9DTElQ
Qk9BUkQgOiBHREtfU0VMRUNUSU9OX1BSSU1BUlkpKQoreworfQorCitzdGF0aWMgYm9vbCBpc1By
aW1hcnlDbGlwYm9hcmQoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCit7CisgICAgcmV0dXJuIGNs
aXBib2FyZCA9PSBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9nZXRf
ZGVmYXVsdCgpLCBHREtfU0VMRUNUSU9OX1BSSU1BUlkpOworfQorCitDbGlwYm9hcmQ6OlR5cGUg
Q2xpcGJvYXJkOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNQcmltYXJ5Q2xpcGJvYXJk
KG1fY2xpcGJvYXJkKSA/IFR5cGU6OlByaW1hcnkgOiBUeXBlOjpDbGlwYm9hcmQ7Cit9CisKK3N0
cnVjdCBGb3JtYXRzQXN5bmNEYXRhIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQ7CisKKyAgICBleHBsaWNpdCBGb3JtYXRzQXN5bmNEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPFN0cmluZz4mJik+JiYgaGFuZGxlcikKKyAgICAgICAgOiBjb21wbGV0aW9uSGFu
ZGxlcihXVEZNb3ZlKGhhbmRsZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiBjb21wbGV0aW9uSGFuZGxlcjsKK307CisKK3Zv
aWQgQ2xpcGJvYXJkOjpmb3JtYXRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmlu
Zz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZ3RrX2NsaXBib2FyZF9yZXF1ZXN0
X3RhcmdldHMobV9jbGlwYm9hcmQsIFtdKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBHZGtBdG9t
KiBhdG9tcywgZ2ludCBhdG9tc0NvdW50LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Rm9ybWF0c0FzeW5jRGF0YT4gZGF0YShzdGF0aWNfY2FzdDxGb3JtYXRz
QXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXRvbXNDb3VudDsgKytpKSB7CisgICAgICAg
ICAgICBHVW5pcXVlUHRyPGNoYXI+IGF0b20oZ2RrX2F0b21fbmFtZShhdG9tc1tpXSkpOworICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGF0b20uZ2V0KCkpKTsKKyAg
ICAgICAgfQorICAgICAgICBkYXRhLT5jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkp
OworICAgIH0sIG5ldyBGb3JtYXRzQXN5bmNEYXRhKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KSk7Cit9CisKK3N0cnVjdCBSZWFkVGV4dEFzeW5jRGF0YSB7CisgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOworCisgICAgZXhwbGljaXQgUmVhZFRleHRBc3luY0RhdGEoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYgaGFuZGxlcikKKyAgICAgICAgOiBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4gY29tcGxldGlvbkhhbmRsZXI7Cit9OworCit2b2lk
IENsaXBib2FyZDo6cmVhZFRleHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZ3RrX2NsaXBib2FyZF9yZXF1ZXN0X3RleHQobV9j
bGlwYm9hcmQsIFtdKEd0a0NsaXBib2FyZCosIGNvbnN0IGNoYXIqIHRleHQsIGdwb2ludGVyIHVz
ZXJEYXRhKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWFkVGV4dEFzeW5jRGF0YT4gZGF0
YShzdGF0aWNfY2FzdDxSZWFkVGV4dEFzeW5jRGF0YSo+KHVzZXJEYXRhKSk7CisgICAgICAgIGRh
dGEtPmNvbXBsZXRpb25IYW5kbGVyKFN0cmluZzo6ZnJvbVVURjgodGV4dCkpOworICAgIH0sIG5l
dyBSZWFkVGV4dEFzeW5jRGF0YShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCitz
dHJ1Y3QgUmVhZEZpbGVQYXRoc0FzeW5jRGF0YSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworCisgICAgZXhwbGljaXQgUmVhZEZpbGVQYXRoc0FzeW5jRGF0YShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGhhbmRsZXIpCisgICAgICAgIDog
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGVyKSkKKyAgICB7CisgICAgfQorCisgICAg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4gY29tcGxldGlvbkhhbmRs
ZXI7Cit9OworCit2b2lkIENsaXBib2FyZDo6cmVhZEZpbGVQYXRocyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGd0
a19jbGlwYm9hcmRfcmVxdWVzdF91cmlzKG1fY2xpcGJvYXJkLCBbXShHdGtDbGlwYm9hcmQqLCBj
aGFyKiogdXJpcywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlYWRGaWxlUGF0aHNBc3luY0RhdGE+IGRhdGEoc3RhdGljX2Nhc3Q8UmVhZEZpbGVQYXRoc0Fz
eW5jRGF0YSo+KHVzZXJEYXRhKSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgdXJpcyAmJiB1cmlzW2ldOyArK2kpIHsKKyAgICAg
ICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lKGdfZmlsZW5hbWVfZnJvbV91cmkodXJp
c1tpXSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgICAgICAgICAgaWYgKGZpbGVuYW1lKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChmaWxlbmFtZS5nZXQo
KSkpOworICAgICAgICB9CisgICAgICAgIGRhdGEtPmNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
cmVzdWx0KSk7CisgICAgfSwgbmV3IFJlYWRGaWxlUGF0aHNBc3luY0RhdGEoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpKTsKK30KKworc3RydWN0IFJlYWRCdWZmZXJBc3luY0RhdGEgeworICAg
IFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKworICAgIGV4cGxpY2l0IFJlYWRCdWZm
ZXJBc3luY0RhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPiYmKT4mJiBoYW5kbGVyKQorICAgICAgICA6IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
aGFuZGxlcikpCisgICAgeworICAgIH0KKworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVm
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJik+IGNvbXBsZXRpb25IYW5kbGVyOworfTsKKwordm9p
ZCBDbGlwYm9hcmQ6OnJlYWRCdWZmZXIoY29uc3QgY2hhciogZm9ybWF0LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQoreworICAgIGd0a19jbGlwYm9hcmRfcmVxdWVzdF9jb250ZW50cyhtX2NsaXBib2FyZCwg
Z2RrX2F0b21faW50ZXJuKGZvcm1hdCwgVFJVRSksIFtdKEd0a0NsaXBib2FyZCosIEd0a1NlbGVj
dGlvbkRhdGEqIHNlbGVjdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFJlYWRCdWZmZXJBc3luY0RhdGE+IGRhdGEoc3RhdGljX2Nhc3Q8UmVhZEJ1ZmZl
ckFzeW5jRGF0YSo+KHVzZXJEYXRhKSk7CisgICAgICAgIGludCBjb250ZW50c0xlbmd0aDsKKyAg
ICAgICAgY29uc3QgYXV0byogY29udGVudHMgPSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGFf
d2l0aF9sZW5ndGgoc2VsZWN0aW9uLCAmY29udGVudHNMZW5ndGgpOworICAgICAgICBkYXRhLT5j
b21wbGV0aW9uSGFuZGxlcihXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50cywg
Y29udGVudHNMZW5ndGggPiAwID8gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb250ZW50c0xlbmd0aCkg
OiAwKSk7CisgICAgfSwgbmV3IFJlYWRCdWZmZXJBc3luY0RhdGEoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpKTsKK30KKworZW51bSBDbGlwYm9hcmRUYXJnZXRUeXBlIHsgVGFyZ2V0VHlwZU1h
cmt1cCwgVGFyZ2V0VHlwZVRleHQsIFRhcmdldFR5cGVJbWFnZSwgVGFyZ2V0VHlwZVNtYXJ0UGFz
dGUgfTsKKwordm9pZCBDbGlwYm9hcmQ6OndyaXRlKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkRh
dGEmIHNlbGVjdGlvbkRhdGEpCit7CisgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0g
YWRvcHRHUmVmKGd0a190YXJnZXRfbGlzdF9uZXcobnVsbHB0ciwgMCkpOworICAgIGlmIChzZWxl
Y3Rpb25EYXRhLmhhc01hcmt1cCgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3Qu
Z2V0KCksIGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0L2h0bWwiKSwgMCwgVGFy
Z2V0VHlwZU1hcmt1cCk7CisgICAgaWYgKHNlbGVjdGlvbkRhdGEuaGFzSW1hZ2UoKSkKKyAgICAg
ICAgZ3RrX3RhcmdldF9saXN0X2FkZF9pbWFnZV90YXJnZXRzKGxpc3QuZ2V0KCksIFRhcmdldFR5
cGVJbWFnZSwgVFJVRSk7CisgICAgaWYgKHNlbGVjdGlvbkRhdGEuaGFzVGV4dCgpKQorICAgICAg
ICBndGtfdGFyZ2V0X2xpc3RfYWRkX3RleHRfdGFyZ2V0cyhsaXN0LmdldCgpLCBUYXJnZXRUeXBl
VGV4dCk7CisgICAgaWYgKHNlbGVjdGlvbkRhdGEuY2FuU21hcnRSZXBsYWNlKCkpCisgICAgICAg
IGd0a190YXJnZXRfbGlzdF9hZGQobGlzdC5nZXQoKSwgZ2RrX2F0b21faW50ZXJuX3N0YXRpY19z
dHJpbmcoImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRndGsuc21hcnRwYXN0ZSIpLCAwLCBUYXJnZXRU
eXBlU21hcnRQYXN0ZSk7CisKKyAgICBpbnQgbnVtYmVyT2ZUYXJnZXRzOworICAgIEd0a1Rhcmdl
dEVudHJ5KiB0YWJsZSA9IGd0a190YXJnZXRfdGFibGVfbmV3X2Zyb21fbGlzdChsaXN0LmdldCgp
LCAmbnVtYmVyT2ZUYXJnZXRzKTsKKyAgICBpZiAoIW51bWJlck9mVGFyZ2V0cykgeworICAgICAg
ICBndGtfY2xpcGJvYXJkX2NsZWFyKG1fY2xpcGJvYXJkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNlbGVjdGlvbkRhdGEucmVmKCk7CisgICAgZ2Jvb2xlYW4gc3VjY2VlZGVkID0g
Z3RrX2NsaXBib2FyZF9zZXRfd2l0aF9kYXRhKG1fY2xpcGJvYXJkLCB0YWJsZSwgbnVtYmVyT2ZU
YXJnZXRzLAorICAgICAgICBbXShHdGtDbGlwYm9hcmQqLCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxl
Y3Rpb24sIGd1aW50IGluZm8sIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRv
JiBzZWxlY3Rpb25EYXRhID0gKnN0YXRpY19jYXN0PFdlYkNvcmU6OlNlbGVjdGlvbkRhdGEqPih1
c2VyRGF0YSk7CisgICAgICAgICAgICBzd2l0Y2ggKGluZm8pIHsKKyAgICAgICAgICAgIGNhc2Ug
VGFyZ2V0VHlwZU1hcmt1cDogeworICAgICAgICAgICAgICAgIENTdHJpbmcgbWFya3VwID0gc2Vs
ZWN0aW9uRGF0YS5tYXJrdXAoKS51dGY4KCk7CisgICAgICAgICAgICAgICAgZ3RrX3NlbGVjdGlv
bl9kYXRhX3NldChzZWxlY3Rpb24sIGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0
L2h0bWwiKSwgOCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihtYXJrdXAuZGF0YSgp
KSwgbWFya3VwLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgVGFyZ2V0VHlwZVRleHQ6CisgICAgICAgICAgICAgICAgZ3Rr
X3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KHNlbGVjdGlvbiwgc2VsZWN0aW9uRGF0YS50ZXh0KCku
dXRmOCgpLmRhdGEoKSwgLTEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUYXJnZXRUeXBlSW1hZ2U6IHsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uRGF0
YS5oYXNJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBw
aXhidWYgPSBhZG9wdEdSZWYoc2VsZWN0aW9uRGF0YS5pbWFnZSgpLT5nZXRHZGtQaXhidWYoKSk7
CisgICAgICAgICAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfcGl4YnVmKHNlbGVj
dGlvbiwgcGl4YnVmLmdldCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRhcmdldFR5cGVTbWFydFBh
c3RlOgorICAgICAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfdGV4dChzZWxlY3Rp
b24sICIiLCAtMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisgICAgICAgIFtdKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgICAgICAgICAgYXV0byYgc2VsZWN0aW9uRGF0YSA9ICpzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpTZWxlY3Rpb25EYXRhKj4odXNlckRhdGEpOworICAgICAgICAgICAgaWYgKGlzUHJp
bWFyeUNsaXBib2FyZChjbGlwYm9hcmQpKQorICAgICAgICAgICAgICAgIFdlYlBhc3RlYm9hcmRQ
cm94eTo6c2luZ2xldG9uKCkuZGlkQ2xlYXJQcmltYXJ5U2VsZWN0aW9uKCk7CisgICAgICAgICAg
ICBzZWxlY3Rpb25EYXRhLmRlcmVmKCk7CisgICAgICAgIH0sIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6
U2VsZWN0aW9uRGF0YSo+KCZzZWxlY3Rpb25EYXRhKSk7CisKKyAgICBpZiAoc3VjY2VlZGVkKQor
ICAgICAgICBndGtfY2xpcGJvYXJkX3NldF9jYW5fc3RvcmUobV9jbGlwYm9hcmQsIG51bGxwdHIs
IDApOworICAgIGVsc2UKKyAgICAgICAgc2VsZWN0aW9uRGF0YS5kZXJlZigpOworCisgICAgZ3Rr
X3RhcmdldF90YWJsZV9mcmVlKHRhYmxlLCBudW1iZXJPZlRhcmdldHMpOworfQorCit2b2lkIENs
aXBib2FyZDo6Y2xlYXIoKQoreworICAgIGd0a19jbGlwYm9hcmRfY2xlYXIobV9jbGlwYm9hcmQp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrNC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrNC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi4yMGYxYmQ5YmEzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrNC5jcHAKQEAgLTAsMCArMSw3NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKworI2lmIFVTRShHVEs0KQorCisjaW5j
bHVkZSA8V2ViQ29yZS9TZWxlY3Rpb25EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRC
dWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0NsaXBib2FyZDo6Q2xpcGJvYXJkKFR5
cGUpCit7Cit9CisKK0NsaXBib2FyZDo6VHlwZSBDbGlwYm9hcmQ6OnR5cGUoKSBjb25zdAorewor
ICAgIHJldHVybiBUeXBlOjpDbGlwYm9hcmQ7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpmb3JtYXRz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKK30KKwordm9pZCBDbGlwYm9h
cmQ6OnJlYWRUZXh0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Cit9CisKK3ZvaWQgQ2xp
cGJvYXJkOjpyZWFkRmlsZVBhdGhzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmlu
Zz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9
KTsKK30KKwordm9pZCBDbGlwYm9hcmQ6OnJlYWRCdWZmZXIoY29uc3QgY2hhciogZm9ybWF0LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKCkpOworfQorCit2b2lkIENsaXBib2FyZDo6d3JpdGUoY29uc3QgV2Vi
Q29yZTo6U2VsZWN0aW9uRGF0YSYpCit7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpjbGVhcigpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJveHlHdGsuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYlBhc3RlYm9hcmRQcm94eUd0ay5jcHAKaW5kZXggOWVj
OGU4OTU5OTYzLi5hMzM5NDQwMGEzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJveHlHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJveHlHdGsuY3BwCkBAIC0yNiwyNyArMjYsNTcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkUHJveHkuaCIKIAor
I2luY2x1ZGUgIkNsaXBib2FyZC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVu
Y2UuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViU2VsZWN0aW9u
RGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1QYXN0ZWJvYXJkLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAordm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OmdldFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgQ2xpcGJvYXJkOjpnZXQocGFzdGVib2FyZE5hbWUpLmZvcm1hdHMoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6
cmVhZFRleHQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTdHJpbmcmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQ2xpcGJvYXJkOjpn
ZXQocGFzdGVib2FyZE5hbWUpLnJlYWRUZXh0KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
K30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRGaWxlUGF0aHMoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBDbGlwYm9hcmQ6OmdldChwYXN0ZWJvYXJk
TmFtZSkucmVhZEZpbGVQYXRocyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3Zv
aWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoSVBDOjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIENsaXBib2FyZDo6Z2V0KHBhc3RlYm9hcmROYW1lKS5yZWFkQnVmZmVyKHBhc3Rl
Ym9hcmRUeXBlLnV0ZjgoKS5kYXRhKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30K
Kwogdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlVG9DbGlwYm9hcmQoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgV2ViU2VsZWN0aW9uRGF0YSYgc2VsZWN0aW9uKQogewot
ICAgIFNldEZvclNjb3BlPFdlYkZyYW1lUHJveHkqPiBmcmFtZVdyaXRpbmdUb0NsaXBib2FyZCht
X2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkLCBtX3ByaW1hcnlTZWxlY3Rpb25Pd25lcik7Ci0gICAg
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZVRvQ2xpcGJvYXJkKHNlbGVj
dGlvbi5zZWxlY3Rpb25EYXRhLCBbdGhpc10gewotICAgICAgICBpZiAobV9mcmFtZVdyaXRpbmdU
b0NsaXBib2FyZCA9PSBtX3ByaW1hcnlTZWxlY3Rpb25Pd25lcikKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgc2V0UHJpbWFyeVNlbGVjdGlvbk93bmVyKG51bGxwdHIpOwotICAgIH0pOwor
ICAgIGF1dG8mIGNsaXBib2FyZCA9IENsaXBib2FyZDo6Z2V0KHBhc3RlYm9hcmROYW1lKTsKKyAg
ICBpZiAoY2xpcGJvYXJkLnR5cGUoKSA9PSBDbGlwYm9hcmQ6OlR5cGU6OlByaW1hcnkpIHsKKyAg
ICAgICAgU2V0Rm9yU2NvcGU8V2ViRnJhbWVQcm94eSo+IGZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJk
KG1fZnJhbWVXcml0aW5nVG9DbGlwYm9hcmQsIG1fcHJpbWFyeVNlbGVjdGlvbk93bmVyKTsKKyAg
ICAgICAgY2xpcGJvYXJkLndyaXRlKHNlbGVjdGlvbi5zZWxlY3Rpb25EYXRhKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgY2xpcGJvYXJkLndyaXRlKHNlbGVjdGlvbi5zZWxlY3Rpb25EYXRhKTsKIH0K
IAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViU2VsZWN0aW9uRGF0
YSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpjbGVh
ckNsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdlYlNlbGVjdGlvbkRhdGEoUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKS5yZWFkRnJvbUNsaXBib2FyZCgpKSk7CisgICAgQ2xpcGJvYXJkOjpnZXQocGFzdGVib2Fy
ZE5hbWUpLmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpkaWRDbGVhclBy
aW1hcnlTZWxlY3Rpb24oKQoreworICAgIGlmIChtX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkID09
IG1fcHJpbWFyeVNlbGVjdGlvbk93bmVyKQorICAgICAgICByZXR1cm47CisgICAgc2V0UHJpbWFy
eVNlbGVjdGlvbk93bmVyKG51bGxwdHIpOwogfQogCiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6
c2V0UHJpbWFyeVNlbGVjdGlvbk93bmVyKFdlYkZyYW1lUHJveHkqIGZyYW1lKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAppbmRleCAyMWY5ODdkY2NhZWIuLjZkYmMzZmNiOTIxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTI5MywxNyArMjkzLDQ5IEBA
IHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp1cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmll
cnMoY29uc3QgVmVjdG9yPFN0cmluZz4mCiAjaWYgUExBVEZPUk0oR1RLKQogLy8gUGFzdGVib2Fy
ZFN0cmF0ZWd5CiAKK1ZlY3RvcjxTdHJpbmc+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6dHlwZXMo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1
bHQ7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0VHlwZXMocGFzdGVi
b2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRUeXBlczo6UmVwbHko
cmVzdWx0KSwgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RyaW5nIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6cmVhZFRleHRGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUpCit7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVi
b2FyZFByb3h5OjpSZWFkVGV4dChwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OlJlYWRUZXh0OjpSZXBseShyZXN1bHQpLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitWZWN0b3I8U3RyaW5nPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRGaWxlUGF0
aHNGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7CisgICAgVmVj
dG9yPFN0cmluZz4gcmVzdWx0OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OlJlYWRGaWxlUGF0aHMocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFBy
b3h5OjpSZWFkRmlsZVBhdGhzOjpSZXBseShyZXN1bHQpLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitSZWZQdHI8U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRC
dWZmZXJGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUpCit7CisKKyAgICBJUEM6OlNoYXJlZEJ1ZmZlckRhdGFSZWZl
cmVuY2UgZGF0YTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkQnVm
ZmVyKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OlJlYWRCdWZmZXI6OlJlcGx5KGRhdGEpLCAwKTsKKyAgICByZXR1cm4gZGF0YS5i
dWZmZXIoKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9DbGlwYm9h
cmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgU2VsZWN0aW9uRGF0YSYmIHNlbGVjdGlv
bkRhdGEpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpXcml0ZVRvQ2xpcGJv
YXJkKHBhc3RlYm9hcmROYW1lLCBXZWJTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEpKSwgMCk7
Cit9CisKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFNlbGVjdGlvbkRhdGEmIHNlbGVjdGlvbikK
IHsKICAgICBXZWJTZWxlY3Rpb25EYXRhIHNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uKTsKICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OldyaXRlVG9DbGlwYm9hcmQocGFzdGVib2FyZE5h
bWUsIHNlbGVjdGlvbkRhdGEpLCAwKTsKIH0KIAotUmVmPFNlbGVjdGlvbkRhdGE+IFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6cmVhZEZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjbGVhckNsaXBib2FyZChjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIFdlYlNlbGVjdGlvbkRhdGEgc2VsZWN0aW9u
OwotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRGcm9tQ2xpcGJvYXJk
KHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZEZyb21D
bGlwYm9hcmQ6OlJlcGx5KHNlbGVjdGlvbiksIDApOwotICAgIHJldHVybiBXVEZNb3ZlKHNlbGVj
dGlvbi5zZWxlY3Rpb25EYXRhKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkNs
ZWFyQ2xpcGJvYXJkKHBhc3RlYm9hcmROYW1lKSwgMCk7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9S
TShHVEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKaW5kZXggMzViM2YxZjhhYTU5Li42
NWUxM2MzY2IxYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKQEAgLTc1LDggKzc1
LDEzIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIHVybFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyhj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcmIHRpdGxlKSBvdmVycmlkZTsKICNl
bmRpZgogI2lmIFBMQVRGT1JNKEdUSykKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcyhjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgcmVhZFRleHRGcm9t
Q2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOworICAgIFZl
Y3RvcjxTdHJpbmc+IHJlYWRGaWxlUGF0aHNGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpIG92ZXJyaWRlOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJlYWRCdWZm
ZXJGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUpIG92ZXJyaWRlOwogICAgIHZvaWQgd3JpdGVUb0NsaXBib2FyZChj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25EYXRh
Jikgb3ZlcnJpZGU7Ci0gICAgUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+IHJlYWRGcm9tQ2xp
cGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOworICAgIHZvaWQg
d3JpdGVUb0NsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXZWJDb3JlOjpT
ZWxlY3Rpb25EYXRhJiYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJDbGlwYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CiAjZW5kaWYKICNpZiBVU0UoTElCV1BF
KQogICAgIHZvaWQgZ2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzKSBvdmVycmlkZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398723</attachid>
            <date>2020-05-07 05:21:54 -0700</date>
            <delta_ts>2020-05-11 05:50:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk-clipboard.diff</filename>
            <type>text/plain</type>
            <size>68852</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNmI0ZDNjMDFjYmMuLjk1OWUxNzQzMzg0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDUwIEBACisyMDIwLTA1LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZXdvcmsgY2xpcGJvYXJkIGhhbmRsaW5nIGlu
IHByZXBhcmF0aW9uIGZvciBHVEs0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTE1MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW1vdmUgUGxhdGZvcm1QYXN0ZWJvYXJkIGltcGxlbWVudGF0aW9uIHRo
YXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgQ2xpcGJvYXJkIGNsYXNzIGluIHRoZSBXZWJLaXQKKyAg
ICAgICAgbGF5ZXIuIFdoZW4gUGFzdGVib2FyZCBjbGFzcyBpcyBjcmVhdGVkIGZvciBjb3B5IGFu
ZCBwYXN0ZSBvcGVyYXRpb25zLCBpdCBubyBsb25nZXIgaGFzIGEgU2VsZWN0aW9uRGF0YSBtZW1i
ZXIsCisgICAgICAgIGl0IGp1c3QgdXNlcyB0aGUgbmV3IG1ldGhvZHMgaW4gdGhlIHBhc3RlYm9h
cmQgc3RyYXRlZ3kgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2xpcGJvYXJkLiBXZWJDb250ZW50
UmVhZGVyIGhhcworICAgICAgICBub3cgYW4gaW1wbGVtZW50YXRpb24gZm9yIEdUSyBhbmQgaXQn
cyB1c2VkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBjbGlwYm9hcmQsIHRoZSBzYW1lIHdheSBpdCdz
IGRvbmUgaW4gb3RoZXIgcG9ydHMuCisKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAg
ICAgKiBlZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIuaDoKKyAgICAgICAgKiBlZGl0aW5nL2d0ay9F
ZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJv
YXJkKTogVXNlIHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgpLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQpOiBVc2UgV2ViQ29udGVudFJlYWRlci4K
KyAgICAgICAgKiBlZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZEZpbGVQYXRocyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJDb250ZW50UmVhZGVyOjpyZWFkUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNv
bnRlbnRSZWFkZXI6OnJlYWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVh
ZGVyOjpyZWFkVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJrdXBSZWFkZXI6
OnJlYWRIVE1MKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudFJlYWRlcjo6cmVhZERhdGFCdWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OlBh
c3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6c2VsZWN0aW9uRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVz
Rm9yTGVnYWN5VW5zYWZlQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
cmVhZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpmaWxlQ29udGVudFN0
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJkR3RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvU2VsZWN0aW9uRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25E
YXRhOjpzZXRVUkwpOiBEbyBub3Qgb3ZlcnJpZGUgdGhlIHRleHQgYW5kIG1hcmt1cCBpZiBpdCBo
YXMgYWxyZWFkeSBiZWVuIHNldC4KKwogMjAyMC0wNS0wMiAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBsb2cgY2hhbm5lbCBmb3IgT3Zlcmxh
eVNjcm9sbGJhcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKaW5kZXggM2Q3NWJkNTIwY2U4Li5hNzYwOTI3
NzBmMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC00Miw2ICs0Miw3IEBAIGFjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAogZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rp
b25BdGsuY3BwCiAKIGVkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKK2VkaXRpbmcvZ3RrL1dlYkNv
bnRlbnRSZWFkZXJHdGsuY3BwCiAKIGxvYWRlci9zb3VwL1Jlc291cmNlTG9hZGVyU291cC5jcHAK
IApAQCAtMTEwLDcgKzExMSw2IEBAIHBsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNw
cAogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEhlbHBlci5jcHAKIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwCi1w
bGF0Zm9ybS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJkR3RrLmNwcAogcGxhdGZvcm0vZ3RrL1BsYXRm
b3JtU2NyZWVuR3RrLmNwcAogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAK
IHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUdhZGdldC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9XZWJDb250ZW50UmVhZGVyLmgKaW5kZXggNTQ1NDFmMGE3MmJiLi4wOGFhMTI0MjY2MjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oCkBAIC02OCwxOCArNjgs
MjEgQEAgcHVibGljOgogICAgIHZvaWQgYWRkRnJhZ21lbnQoUmVmPERvY3VtZW50RnJhZ21lbnQ+
JiYpOwogCiBwcml2YXRlOgotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgcmVhZFdlYkFy
Y2hpdmUoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBM
QVRGT1JNKEdUSykKICAgICBib29sIHJlYWRGaWxlUGF0aChjb25zdCBTdHJpbmcmLCBQcmVzZW50
YXRpb25TaXplIHByZWZlcnJlZFByZXNlbnRhdGlvblNpemUgPSB7IH0sIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUgPSB7IH0pIG92ZXJyaWRlOwogICAgIGJvb2wgcmVhZEZpbGVQYXRocyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlOwogICAgIGJvb2wgcmVhZEhUTUwoY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCByZWFkUlRGRChTaGFyZWRCdWZmZXImKSBvdmVycmlk
ZTsKLSAgICBib29sIHJlYWRSVEYoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBy
ZWFkSW1hZ2UoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQcmVzZW50
YXRpb25TaXplIHByZWZlcnJlZFByZXNlbnRhdGlvblNpemUgPSB7IH0pIG92ZXJyaWRlOwogICAg
IGJvb2wgcmVhZFVSTChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBvdmVycmlkZTsK
LSAgICBib29sIHJlYWREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQcmVzZW50YXRpb25TaXplIHByZWZlcnJlZFByZXNlbnRh
dGlvblNpemUgPSB7IH0pIG92ZXJyaWRlOwogICAgIGJvb2wgcmVhZFBsYWluVGV4dChjb25zdCBT
dHJpbmcmKSBvdmVycmlkZTsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgYm9v
bCByZWFkV2ViQXJjaGl2ZShTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKKyAgICBib29sIHJlYWRS
VEZEKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcmVhZFJURihTaGFyZWRCdWZm
ZXImKSBvdmVycmlkZTsKKyAgICBib29sIHJlYWREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYsIGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQcmVzZW50YXRpb25TaXplIHBy
ZWZlcnJlZFByZXNlbnRhdGlvblNpemUgPSB7IH0pIG92ZXJyaWRlOworI2VuZGlmCiB9OwogCiBj
bGFzcyBXZWJDb250ZW50TWFya3VwUmVhZGVyIGZpbmFsIDogcHVibGljIEZyYW1lV2ViQ29udGVu
dFJlYWRlciB7CkBAIC05MiwxOCArOTUsMjEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIHJlYWRXZWJBcmNoaXZlKFNoYXJlZEJ1ZmZl
ciYpIG92ZXJyaWRlOworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAg
Ym9vbCByZWFkRmlsZVBhdGgoY29uc3QgU3RyaW5nJiwgUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSwg
Y29uc3QgU3RyaW5nJiA9IHsgfSkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29s
IHJlYWRGaWxlUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mKSBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQogICAgIGJvb2wgcmVhZEhUTUwoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCByZWFkUlRGRChTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKLSAgICBib29sIHJlYWRSVEYo
U2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CiAgICAgYm9vbCByZWFkSW1hZ2UoUmVmPFNoYXJlZEJ1
ZmZlcj4mJiwgY29uc3QgU3RyaW5nJiwgUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIHJlYWRVUkwoY29uc3QgVVJMJiwgY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHJlYWREYXRhQnVmZmVy
KFNoYXJlZEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFByZXNlbnRhdGlv
blNpemUgPSB7IH0pIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCByZWFkUGxh
aW5UZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
KworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGJvb2wgcmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVm
ZmVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCByZWFkUlRGRChTaGFyZWRCdWZmZXImKSBvdmVycmlk
ZTsKKyAgICBib29sIHJlYWRSVEYoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBy
ZWFkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBQcmVzZW50YXRpb25TaXplID0geyB9KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorI2Vu
ZGlmCiB9OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIGRlZmluZWQoX19PQkpDX18pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAppbmRleCBkNDFlNGI5MzAyNzYuLmJl
ZjlmZjYwMDVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9y
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBA
IC0yNyw5ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgi
CiAKLSNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRl
ICJET01VUkwuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50LmgiCkBAIC00NCw0OSArNDIsMTIgQEAK
ICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25EYXRhLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJDb250ZW50UmVhZGVyLmgiCiAj
aW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPGNh
aXJvLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCi17Ci0gICAgY2hvc2VQbGFpblRleHQg
PSBmYWxzZTsKLQotICAgIGlmICghcGFzdGVib2FyZC5oYXNEYXRhKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgY29uc3QgYXV0byYgc2VsZWN0aW9uID0gcGFzdGVib2FyZC5zZWxl
Y3Rpb25EYXRhKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5oYXNJbWFnZSgpKSB7Ci0gICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGF1dG8gc3RhdHVzID0gY2Fpcm9fc3VyZmFj
ZV93cml0ZV90b19wbmdfc3RyZWFtKHNlbGVjdGlvbi5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdl
dCgpLCBbXSh2b2lkKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVk
IHNpemUpIHsKLSAgICAgICAgICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8dWludDhf
dD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKLSAgICAgICAgICAgIHJldHVybiBDQUlST19T
VEFUVVNfU1VDQ0VTUzsKLSAgICAgICAgfSwgJmJ1ZmZlcik7Ci0gICAgICAgIGlmIChzdGF0dXMg
PT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGF1dG8gYmxvYiA9IEJsb2I6
OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlciksICJpbWFnZS9wbmciKTsKLSAgICAgICAgICAgIGlmICgh
ZnJhbWUuZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZvckltYWdlQW5kVVJMKCpmcmFtZS5kb2N1bWVu
dCgpLCBET01VUkw6OmNyZWF0ZU9iamVjdFVSTCgqZnJhbWUuZG9jdW1lbnQoKSwgYmxvYiksIHsg
fSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2VsZWN0aW9uLmhhc01hcmt1cCgpICYm
IGZyYW1lLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoKmZyYW1lLmRvY3VtZW50KCksIHNlbGVjdGlvbi5tYXJrdXAoKSwgZW1wdHlTdHJpbmcoKSwg
RGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsKLQotICAgIGlmICghYWxsb3dQbGFp
blRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHNlbGVjdGlvbi5oYXNU
ZXh0KCkpIHsKLSAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0cnVlOwotICAgICAgICByZXR1cm4g
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBzZWxlY3Rpb24u
dGV4dCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogdm9pZCBFZGl0b3I6
OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBh
c3RlT3B0aW9uPiBvcHRpb25zKQogewogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rl
ZFJhbmdlKCk7CkBAIC05NCw3ICs1NSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgq
cGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5z
KFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQo
KnBhc3RlYm9hcmQsICpyYW5nZSwgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQ
bGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9u
cy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdt
ZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpAQCAtMTU0LDcgKzExNSwxMCBAQCB2b2lkIEVkaXRv
cjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIAog
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJk
KFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29s
IGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEocGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJh
bWUoKSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKKyAgICBXZWJD
b250ZW50UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVudC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1Bs
YWluVGV4dCk7CisgICAgcGFzdGVib2FyZC5yZWFkKHJlYWRlcik7CisgICAgY2hvc2VQbGFpblRl
eHQgPSByZWFkZXIubWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dDsKKyAgICByZXR1cm4gV1RGTW92
ZShyZWFkZXIuZnJhZ21lbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzdkMzRiZGUyZTdmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvV2ViQ29udGVudFJlYWRlckd0
ay5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvbnRlbnRSZWFkZXIuaCIKKworI2luY2x1ZGUg
IkJsb2JVUkwuaCIKKyNpbmNsdWRlICJET01VUkwuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRGaWxlUGF0aChjb25zdCBTdHJp
bmcmIHBhdGgsIFByZXNlbnRhdGlvblNpemUsIGNvbnN0IFN0cmluZyYpCit7CisgICAgaWYgKHBh
dGguaXNFbXB0eSgpIHx8ICFmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIG1hcmt1cCA9IHVybFRvTWFya3VwKFVSTCh7IH0sIHBhdGgpLCBwYXRoKTsK
KyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50
KCksIG1hcmt1cCwgImZpbGU6Ly8iLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQp
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRG
aWxlUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIGlmIChwYXRocy5p
c0VtcHR5KCkgfHwgIWZyYW1lLmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKQorICAgICAgICByZWFkRmlsZVBhdGgocGF0aCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkSFRN
TChjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoZnJhbWUuc2V0dGluZ3MoKS5wcmVm
ZXJNSU1FVHlwZUZvckltYWdlcygpIHx8ICFmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZy
YW1lLmRvY3VtZW50KCksIHN0cmluZywgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdB
bmRQbHVnaW5Db250ZW50KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViQ29udGVu
dFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgaWYgKCFh
bGxvd1BsYWluVGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYWRkRnJhZ21lbnQo
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCksIHRleHQpKTsK
KworICAgIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQgPSB0cnVlOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRJbWFnZShSZWY8U2hhcmVkQnVmZmVy
PiYmIGJ1ZmZlciwgY29uc3QgU3RyaW5nJiB0eXBlLCBQcmVzZW50YXRpb25TaXplIHByZWZlcnJl
ZFByZXNlbnRhdGlvblNpemUpCit7CisgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOworICAg
IGF1dG8mIGRvY3VtZW50ID0gKmZyYW1lLmRvY3VtZW50KCk7CisgICAgYWRkRnJhZ21lbnQoY3Jl
YXRlRnJhZ21lbnRGb3JJbWFnZUFuZFVSTChkb2N1bWVudCwgRE9NVVJMOjpjcmVhdGVPYmplY3RV
UkwoZG9jdW1lbnQsIEJsb2I6OmNyZWF0ZShidWZmZXIuZ2V0KCksIHR5cGUpKSwgcHJlZmVycmVk
UHJlc2VudGF0aW9uU2l6ZSkpOworCisgICAgcmV0dXJuIGZyYWdtZW50OworfQorCitib29sIFdl
YkNvbnRlbnRSZWFkZXI6OnJlYWRVUkwoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZEhU
TUwoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9h
cmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRleCAxYjhlYTA2
Y2JkYzcuLjAxZGI1OTk1NTIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApA
QCAtMTM2LDE4ICsxMzYsMjEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+UGFzdGVib2FyZFdl
YkNvbnRlbnRSZWFkZXIoKSA9IGRlZmF1bHQ7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2
aXJ0dWFsIGJvb2wgcmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJikgPSAwOworI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCiAgICAgdmlydHVhbCBib29sIHJlYWRGaWxlUGF0
aChjb25zdCBTdHJpbmcmLCBQcmVzZW50YXRpb25TaXplIHByZWZlcnJlZFByZXNlbnRhdGlvblNp
emUgPSB7IH0sIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUgPSB7IH0pID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgcmVhZEZpbGVQYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgcmVhZEhUTUwoY29uc3QgU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCByZWFkUlRGRChTaGFyZWRCdWZmZXImKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHJlYWRSVEYo
U2hhcmVkQnVmZmVyJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWFkSW1hZ2UoUmVmPFNoYXJl
ZEJ1ZmZlcj4mJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQcmVzZW50YXRpb25TaXplIHByZWZlcnJl
ZFByZXNlbnRhdGlvblNpemUgPSB7IH0pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVhZFVSTChj
b25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHJl
YWREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBQcmVzZW50YXRpb25TaXplIHByZWZlcnJlZFByZXNlbnRhdGlvblNpemUgPSB7
IH0pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmKSA9
IDA7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZpcnR1YWwgYm9vbCByZWFk
V2ViQXJjaGl2ZShTaGFyZWRCdWZmZXImKSA9IDA7CisgICAgdmlydHVhbCBib29sIHJlYWRSVEZE
KFNoYXJlZEJ1ZmZlciYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZFJURihTaGFyZWRCdWZm
ZXImKSA9IDA7CisgICAgdmlydHVhbCBib29sIHJlYWREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYs
IGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBQcmVzZW50YXRpb25TaXpl
IHByZWZlcnJlZFByZXNlbnRhdGlvblNpemUgPSB7IH0pID0gMDsKKyNlbmRpZgogfTsKIAogc3Ry
dWN0IFBhc3RlYm9hcmRQbGFpblRleHQgewpAQCAtMzEzLDkgKzMxNiw3IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHdyaXRlVG9DbGlwYm9hcmQoKTsK
LSAgICB2b2lkIHJlYWRGcm9tQ2xpcGJvYXJkKCk7Ci0gICAgUmVmPFNlbGVjdGlvbkRhdGE+IG1f
c2VsZWN0aW9uRGF0YTsKKyAgICBSZWZQdHI8U2VsZWN0aW9uRGF0YT4gbV9zZWxlY3Rpb25EYXRh
OwogICAgIFN0cmluZyBtX25hbWU7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaAppbmRleCBiNjNlMzVkMDk4MWEuLjVkOTE2NGYxNDA4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgKQEAgLTgx
LDggKzgxLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNTdHJpbmdTYWZl
Rm9yRE9NVG9SZWFkRm9yVHlwZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKSA9IDA7CiAKICNpZiBQTEFURk9STShHVEspCisgICAgdmlydHVhbCBWZWN0b3I8U3Ry
aW5nPiB0eXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CisgICAgdmlydHVh
bCBTdHJpbmcgcmVhZFRleHRGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHJlYWRGaWxlUGF0aHNGcm9tQ2xp
cGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IHJlYWRCdWZmZXJGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAgIHZpcnR1
YWwgdm9pZCB3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFNl
bGVjdGlvbkRhdGEmJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZVRvQ2xpcGJvYXJkKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFNlbGVjdGlvbkRhdGEmKSA9IDA7Ci0g
ICAgdmlydHVhbCBSZWY8U2VsZWN0aW9uRGF0YT4gcmVhZEZyb21DbGlwYm9hcmQoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNsaXBib2Fy
ZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CiAjZW5kaWYgLy8gUExBVEZPUk0o
R1RLKQogCiAjaWYgVVNFKExJQldQRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkR3RrLmNwcAppbmRleCAyMDY3ODIwNzVkZmMuLjk5M2EzN2YxNmQwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcApAQCAtMjMsMTAg
KzIzLDEyIEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJEcmFnRGF0YS5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uRGF0YS5oIgor
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KQEAgLTY2
LDI2ICs2OCwyMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3Jl
YXRlRm9yRHJhZ0FuZERyb3AoY29uc3QgRHJhZ0RhdGEmIGRyYQogI2VuZGlmCiAKIFBhc3RlYm9h
cmQ6OlBhc3RlYm9hcmQoU2VsZWN0aW9uRGF0YSYgc2VsZWN0aW9uRGF0YSkKLSAgICA6IG1fc2Vs
ZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhKQorICAgIDogbV9zZWxlY3Rpb25EYXRhKCZzZWxlY3Rp
b25EYXRhKQogewogfQogCiBQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLSAgICA6IG1fc2VsZWN0aW9uRGF0YShTZWxlY3Rpb25EYXRhOjpjcmVhdGUoKSkKLSAgICAs
IG1fbmFtZShuYW1lKQotewotfQotCi1QYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKLSAgICA6IG1f
c2VsZWN0aW9uRGF0YShTZWxlY3Rpb25EYXRhOjpjcmVhdGUoKSkKKyAgICA6IG1fbmFtZShuYW1l
KQogewogfQogCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkgPSBkZWZhdWx0OwogUGFzdGVib2Fy
ZDo6flBhc3RlYm9hcmQoKSA9IGRlZmF1bHQ7CiAKIGNvbnN0IFNlbGVjdGlvbkRhdGEmIFBhc3Rl
Ym9hcmQ6OnNlbGVjdGlvbkRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX3NlbGVjdGlvbkRh
dGEuZ2V0KCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zZWxlY3Rpb25EYXRhKTsKKyAgICByZXR1
cm4gKm1fc2VsZWN0aW9uRGF0YS5nZXQoKTsKIH0KIAogc3RhdGljIENsaXBib2FyZERhdGFUeXBl
IHNlbGVjdGlvbkRhdGFUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgdHlw
ZSkKQEAgLTEwMywyMyArMTAxLDkgQEAgc3RhdGljIENsaXBib2FyZERhdGFUeXBlIHNlbGVjdGlv
bkRhdGFUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgdHkKICAgICByZXR1
cm4gQ2xpcGJvYXJkRGF0YVR5cGVVbmtub3duOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRl
VG9DbGlwYm9hcmQoKQotewotICAgIGlmIChtX25hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3Jp
dGVUb0NsaXBib2FyZChtX25hbWUsIG1fc2VsZWN0aW9uRGF0YSk7Ci19Ci0KLXZvaWQgUGFzdGVi
b2FyZDo6cmVhZEZyb21DbGlwYm9hcmQoKQotewotICAgIGlmIChtX25hbWUuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX3NlbGVjdGlvbkRhdGEgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRGcm9tQ2xpcGJvYXJkKG1fbmFtZSk7Ci19Ci0K
IHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpCiB7CisgICAgQVNTRVJUKG1fc2VsZWN0aW9uRGF0YSk7CiAgICAgc3dpdGNo
IChzZWxlY3Rpb25EYXRhVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlKSkgewogICAgIGNh
c2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgogICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVV
Ukw6CkBAIC0xMzcsMjYgKzEyMSwzMyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVJbWFnZToKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHdyaXRlVG9DbGlwYm9h
cmQoKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcm
IHRleHQsIFNtYXJ0UmVwbGFjZU9wdGlvbiBzbWFydFJlcGxhY2VPcHRpb24pCiB7Ci0gICAgbV9z
ZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOwotICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0VGV4dCh0
ZXh0KTsKLSAgICBtX3NlbGVjdGlvbkRhdGEtPnNldENhblNtYXJ0UmVwbGFjZShzbWFydFJlcGxh
Y2VPcHRpb24gPT0gQ2FuU21hcnRSZXBsYWNlKTsKLQotICAgIHdyaXRlVG9DbGlwYm9hcmQoKTsK
KyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+Y2xl
YXJBbGwoKTsKKyAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRUZXh0KHRleHQpOworICAgICAg
ICBtX3NlbGVjdGlvbkRhdGEtPnNldENhblNtYXJ0UmVwbGFjZShzbWFydFJlcGxhY2VPcHRpb24g
PT0gQ2FuU21hcnRSZXBsYWNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTZWxlY3Rpb25EYXRh
IGRhdGE7CisgICAgICAgIGRhdGEuc2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgZGF0YS5zZXRDYW5T
bWFydFJlcGxhY2Uoc21hcnRSZXBsYWNlT3B0aW9uID09IENhblNtYXJ0UmVwbGFjZSk7CisgICAg
ICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb0Ns
aXBib2FyZChtX25hbWUsIFdURk1vdmUoZGF0YSkpOworICAgIH0KIH0KIAogdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkVVJMJiBwYXN0ZWJvYXJkVVJMKQogewogICAgIEFT
U0VSVCghcGFzdGVib2FyZFVSTC51cmwuaXNFbXB0eSgpKTsKLQotICAgIG1fc2VsZWN0aW9uRGF0
YS0+Y2xlYXJBbGwoKTsKLSAgICBtX3NlbGVjdGlvbkRhdGEtPnNldFVSTChwYXN0ZWJvYXJkVVJM
LnVybCwgcGFzdGVib2FyZFVSTC50aXRsZSk7Ci0KLSAgICB3cml0ZVRvQ2xpcGJvYXJkKCk7Cisg
ICAgaWYgKG1fc2VsZWN0aW9uRGF0YSkgeworICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPmNsZWFy
QWxsKCk7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0VVJMKHBhc3RlYm9hcmRVUkwudXJs
LCBwYXN0ZWJvYXJkVVJMLnRpdGxlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTZWxlY3Rpb25E
YXRhIGRhdGE7CisgICAgICAgIGRhdGEuc2V0VVJMKHBhc3RlYm9hcmRVUkwudXJsLCBwYXN0ZWJv
YXJkVVJMLnRpdGxlKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFtZSwgV1RGTW92ZShkYXRhKSk7CisgICAg
fQogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlVHJ1c3R3b3J0aHlXZWJVUkxzUGJvYXJkVHlw
ZShjb25zdCBQYXN0ZWJvYXJkVVJMJikKQEAgLTE2NiwzOCArMTU3LDU3IEBAIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVUcnVzdHdvcnRoeVdlYlVSTHNQYm9hcmRUeXBlKGNvbnN0IFBhc3RlYm9hcmRV
UkwmKQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYgcGFz
dGVib2FyZEltYWdlKQogewotICAgIG1fc2VsZWN0aW9uRGF0YS0+Y2xlYXJBbGwoKTsKLSAgICBp
ZiAoIXBhc3RlYm9hcmRJbWFnZS51cmwudXJsLmlzRW1wdHkoKSkgewotICAgICAgICBtX3NlbGVj
dGlvbkRhdGEtPnNldFVSTChwYXN0ZWJvYXJkSW1hZ2UudXJsLnVybCwgcGFzdGVib2FyZEltYWdl
LnVybC50aXRsZSk7Ci0gICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0TWFya3VwKHBhc3RlYm9h
cmRJbWFnZS51cmwubWFya3VwKTsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAg
IG1fc2VsZWN0aW9uRGF0YS0+Y2xlYXJBbGwoKTsKKyAgICAgICAgaWYgKCFwYXN0ZWJvYXJkSW1h
Z2UudXJsLnVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0
VVJMKHBhc3RlYm9hcmRJbWFnZS51cmwudXJsLCBwYXN0ZWJvYXJkSW1hZ2UudXJsLnRpdGxlKTsK
KyAgICAgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0TWFya3VwKHBhc3RlYm9hcmRJbWFnZS51
cmwubWFya3VwKTsKKyAgICAgICAgfQorICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldEltYWdl
KHBhc3RlYm9hcmRJbWFnZS5pbWFnZS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU2Vs
ZWN0aW9uRGF0YSBkYXRhOworICAgICAgICBpZiAoIXBhc3RlYm9hcmRJbWFnZS51cmwudXJsLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgZGF0YS5zZXRVUkwocGFzdGVib2FyZEltYWdlLnVybC51
cmwsIHBhc3RlYm9hcmRJbWFnZS51cmwudGl0bGUpOworICAgICAgICAgICAgZGF0YS5zZXRNYXJr
dXAocGFzdGVib2FyZEltYWdlLnVybC5tYXJrdXApOworICAgICAgICB9CisgICAgICAgIGRhdGEu
c2V0SW1hZ2UocGFzdGVib2FyZEltYWdlLmltYWdlLmdldCgpKTsKKyAgICAgICAgcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFt
ZSwgV1RGTW92ZShkYXRhKSk7CiAgICAgfQotICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0SW1hZ2Uo
cGFzdGVib2FyZEltYWdlLmltYWdlLmdldCgpKTsKLQotICAgIHdyaXRlVG9DbGlwYm9hcmQoKTsK
IH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYg
cGFzdGVib2FyZENvbnRlbnQpCiB7Ci0gICAgbV9zZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOwot
ICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0VGV4dChwYXN0ZWJvYXJkQ29udGVudC50ZXh0KTsKLSAg
ICBtX3NlbGVjdGlvbkRhdGEtPnNldE1hcmt1cChwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXApOwot
ICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0Q2FuU21hcnRSZXBsYWNlKHBhc3RlYm9hcmRDb250ZW50
LmNhblNtYXJ0Q29weU9yRGVsZXRlKTsKLQotICAgIHdyaXRlVG9DbGlwYm9hcmQoKTsKKyAgICBp
ZiAobV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+Y2xlYXJBbGwo
KTsKKyAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRUZXh0KHBhc3RlYm9hcmRDb250ZW50LnRl
eHQpOworICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldE1hcmt1cChwYXN0ZWJvYXJkQ29udGVu
dC5tYXJrdXApOworICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldENhblNtYXJ0UmVwbGFjZShw
YXN0ZWJvYXJkQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgU2VsZWN0aW9uRGF0YSBkYXRhOworICAgICAgICBkYXRhLnNldFRleHQocGFzdGVib2Fy
ZENvbnRlbnQudGV4dCk7CisgICAgICAgIGRhdGEuc2V0TWFya3VwKHBhc3RlYm9hcmRDb250ZW50
Lm1hcmt1cCk7CisgICAgICAgIGRhdGEuc2V0Q2FuU21hcnRSZXBsYWNlKHBhc3RlYm9hcmRDb250
ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCkt
PnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFtZSwgV1RGTW92ZShk
YXRhKSk7CisgICAgfQogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKIHsKKyAgICBpZiAo
IW1fc2VsZWN0aW9uRGF0YSkgeworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVi
b2FyZFN0cmF0ZWd5KCktPmNsZWFyQ2xpcGJvYXJkKG1fbmFtZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICAvLyBXZSBkbyBub3QgY2xlYXIgZmlsZW5hbWVzLiBBY2NvcmRpbmcgdG8g
dGhlIHNwZWM6ICJUaGUgY2xlYXJEYXRhKCkgbWV0aG9kCiAgICAgLy8gZG9lcyBub3QgYWZmZWN0
IHdoZXRoZXIgYW55IGZpbGVzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIGRyYWcsIHNvIHRoZSB0eXBl
cwogICAgIC8vIGF0dHJpYnV0ZSdzIGxpc3QgbWlnaHQgc3RpbGwgbm90IGJlIGVtcHR5IGFmdGVy
IGNhbGxpbmcgY2xlYXJEYXRhKCkgKGl0IHdvdWxkCiAgICAgLy8gc3RpbGwgY29udGFpbiB0aGUg
IkZpbGVzIiBzdHJpbmcgaWYgYW55IGZpbGVzIHdlcmUgaW5jbHVkZWQgaW4gdGhlIGRyYWcpLiIK
ICAgICBtX3NlbGVjdGlvbkRhdGEtPmNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCk7Ci0gICAgd3Jp
dGVUb0NsaXBib2FyZCgpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKGNvbnN0IFN0cmlu
ZyYgdHlwZSkKIHsKKyAgICBBU1NFUlQobV9zZWxlY3Rpb25EYXRhKTsKICAgICBzd2l0Y2ggKHNl
bGVjdGlvbkRhdGFUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpKSB7CiAgICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6CiAgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoK
QEAgLTIxNiwxNCArMjI2LDEzIEBAIHZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoY29uc3QgU3RyaW5n
JiB0eXBlKQogICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPmNsZWFyQWxsKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLQotICAgIHdyaXRlVG9DbGlwYm9hcmQoKTsKIH0KIAogYm9vbCBQYXN0ZWJv
YXJkOjpjYW5TbWFydFJlcGxhY2UoKQogewotICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7Ci0gICAg
cmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+Y2FuU21hcnRSZXBsYWNlKCk7CisgICAgaWYgKG1fc2Vs
ZWN0aW9uRGF0YSkKKyAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+Y2FuU21hcnRSZXBs
YWNlKCk7CisgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+dHlwZXMobV9uYW1lKS5jb250YWlucygiYXBwbGljYXRpb24vdm5kLndlYmtpdGd0ay5z
bWFydHBhc3RlIl9zKTsKIH0KIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkBAIC0yMzQsMjUg
KzI0Myw1NSBAQCB2b2lkIFBhc3RlYm9hcmQ6OnNldERyYWdJbWFnZShEcmFnSW1hZ2UsIGNvbnN0
IEludFBvaW50JikKIAogdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRQbGFpblRleHQm
IHRleHQsIFBsYWluVGV4dFVSTFJlYWRpbmdQb2xpY3ksIE9wdGlvbmFsPHNpemVfdD4pCiB7Ci0g
ICAgcmVhZEZyb21DbGlwYm9hcmQoKTsKLSAgICB0ZXh0LnRleHQgPSBtX3NlbGVjdGlvbkRhdGEt
PnRleHQoKTsKKyAgICB0ZXh0LnRleHQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPnJlYWRUZXh0RnJvbUNsaXBib2FyZChtX25hbWUpOwogfQogCi12b2lkIFBh
c3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFdlYkNvbnRlbnRSZWFkZXImLCBXZWJDb250ZW50UmVh
ZGluZ1BvbGljeSwgT3B0aW9uYWw8c2l6ZV90PikKK3ZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0
ZWJvYXJkV2ViQ29udGVudFJlYWRlciYgcmVhZGVyLCBXZWJDb250ZW50UmVhZGluZ1BvbGljeSBw
b2xpY3ksIE9wdGlvbmFsPHNpemVfdD4pCiB7CisgICAgYXV0byB0eXBlcyA9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+dHlwZXMobV9uYW1lKTsKKyAgICBpZiAo
dHlwZXMuY29udGFpbnMoInRleHQvaHRtbCJfcykpIHsKKyAgICAgICAgYXV0byBidWZmZXIgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRCdWZmZXJGcm9t
Q2xpcGJvYXJkKG1fbmFtZSwgInRleHQvaHRtbCJfcyk7CisgICAgICAgIGlmIChidWZmZXIgJiYg
cmVhZGVyLnJlYWRIVE1MKFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+
c2l6ZSgpKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHBvbGljeSA9
PSBXZWJDb250ZW50UmVhZGluZ1BvbGljeTo6T25seVJpY2hUZXh0VHlwZXMpCisgICAgICAgIHJl
dHVybjsKKworICAgIHN0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwgaW1hZ2VUeXBlc1tdID0geyAi
aW1hZ2UvcG5nIl9zLCAiaW1hZ2UvanBlZyJfcywgImltYWdlL2dpZiJfcywgImltYWdlL2JtcCJf
cywgImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiJfcywgImltYWdlL3gtaWNvbiJfcyB9OworICAg
IGZvciAoY29uc3QgYXV0byYgaW1hZ2VUeXBlIDogaW1hZ2VUeXBlcykgeworICAgICAgICBpZiAo
dHlwZXMuY29udGFpbnMoaW1hZ2VUeXBlKSkgeworICAgICAgICAgICAgYXV0byBidWZmZXIgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRCdWZmZXJGcm9t
Q2xpcGJvYXJkKG1fbmFtZSwgaW1hZ2VUeXBlKTsKKyAgICAgICAgICAgIGlmICghYnVmZmVyLT5p
c0VtcHR5KCkgJiYgcmVhZGVyLnJlYWRJbWFnZShidWZmZXIucmVsZWFzZU5vbk51bGwoKSwgaW1h
Z2VUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAodHlwZXMuY29udGFpbnMoInRleHQvdXJpLWxpc3QiX3MpKSB7CisgICAgICAgIGF1dG8g
ZmlsZVBhdGhzID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5y
ZWFkRmlsZVBhdGhzRnJvbUNsaXBib2FyZChtX25hbWUpOworICAgICAgICBpZiAocmVhZGVyLnJl
YWRGaWxlUGF0aHMoZmlsZVBhdGhzKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAodHlwZXMuY29udGFpbnMoInRleHQvcGxhaW4iX3MpIHx8IHR5cGVzLmNvbnRhaW5zKCJ0
ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiX3MpKSB7CisgICAgICAgIGF1dG8gdGV4dCA9IHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZFRleHRGcm9tQ2xpcGJv
YXJkKG1fbmFtZSk7CisgICAgICAgIGlmICghdGV4dC5pc051bGwoKSAmJiByZWFkZXIucmVhZFBs
YWluVGV4dCh0ZXh0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIHZvaWQgUGFz
dGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYgcmVhZGVyKQogewotICAgIHJlYWRG
cm9tQ2xpcGJvYXJkKCk7Ci0gICAgZm9yIChhdXRvJiBmaWxlbmFtZSA6IG1fc2VsZWN0aW9uRGF0
YS0+ZmlsZW5hbWVzKCkpCi0gICAgICAgIHJlYWRlci5yZWFkRmlsZW5hbWUoZmlsZW5hbWUpOwor
ICAgIGF1dG8gZmlsZVBhdGhzID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5yZWFkRmlsZVBhdGhzRnJvbUNsaXBib2FyZChtX25hbWUpOworICAgIGZvciAoY29u
c3QgYXV0byYgZmlsZVBhdGggOiBmaWxlUGF0aHMpCisgICAgICAgIHJlYWRlci5yZWFkRmlsZW5h
bWUoZmlsZVBhdGgpOwogfQogCiBib29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQogewotICAgIHJl
YWRGcm9tQ2xpcGJvYXJkKCk7Ci0gICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+aGFzVGV4dCgp
IHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzTWFya3VwKCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNV
UklMaXN0KCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNJbWFnZSgpIHx8IG1fc2VsZWN0aW9uRGF0
YS0+aGFzVW5rbm93blR5cGVEYXRhKCk7CisgICAgaWYgKG1fc2VsZWN0aW9uRGF0YSkKKyAgICAg
ICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+aGFzVGV4dCgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+
aGFzTWFya3VwKCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNVUklMaXN0KCkgfHwgbV9zZWxlY3Rp
b25EYXRhLT5oYXNJbWFnZSgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzVW5rbm93blR5cGVEYXRh
KCk7CisgICAgcmV0dXJuICFwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPnR5cGVzKG1fbmFtZSkuaXNFbXB0eSgpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJv
YXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmKQpAQCAtMjYzLDcgKzMwMiw4
IEBAIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckJpbmRpbmdzKGNvbnN0
IFN0cmluZyYpCiAKIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5z
YWZlQmluZGluZ3MoKQogewotICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7CisgICAgaWYgKCFtX3Nl
bGVjdGlvbkRhdGEpCisgICAgICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVi
b2FyZFN0cmF0ZWd5KCktPnR5cGVzKG1fbmFtZSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBl
czsKICAgICBpZiAobV9zZWxlY3Rpb25EYXRhLT5oYXNUZXh0KCkpIHsKQEAgLTI5NCw3ICszMzQs
MTMgQEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRPcmlnaW4oKQogCiBTdHJpbmcgUGFzdGVib2Fy
ZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgcmVhZEZyb21DbGlwYm9h
cmQoKTsKKyAgICBpZiAoIW1fc2VsZWN0aW9uRGF0YSkgeworICAgICAgICBpZiAodHlwZS5zdGFy
dHNXaXRoKCJ0ZXh0L3BsYWluIikpCisgICAgICAgICAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5yZWFkVGV4dEZyb21DbGlwYm9hcmQobV9uYW1l
KTsKKworICAgICAgICBhdXRvIGJ1ZmZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKS0+cmVhZEJ1ZmZlckZyb21DbGlwYm9hcmQobV9uYW1lLCB0eXBlKTsKKyAg
ICAgICAgcmV0dXJuIGJ1ZmZlciA/IFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLT5kYXRhKCksIGJ1
ZmZlci0+c2l6ZSgpKSA6IFN0cmluZygpOworICAgIH0KIAogICAgIHN3aXRjaCAoc2VsZWN0aW9u
RGF0YVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZSkpIHsKICAgICBjYXNlIENsaXBib2Fy
ZERhdGFUeXBlVVJJTGlzdDoKQEAgLTMxMSw3ICszNTcsNyBAQCBTdHJpbmcgUGFzdGVib2FyZDo6
cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4geyB9OwogfQogCiBTdHJpbmcgUGFzdGVi
b2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmKQpAQCAtMzIyLDggKzM2
OCwxNyBAQCBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBT
dHJpbmcmKQogCiBQYXN0ZWJvYXJkOjpGaWxlQ29udGVudFN0YXRlIFBhc3RlYm9hcmQ6OmZpbGVD
b250ZW50U3RhdGUoKQogewotICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7Ci0gICAgcmV0dXJuIG1f
c2VsZWN0aW9uRGF0YS0+ZmlsZW5hbWVzKCkuaXNFbXB0eSgpID8gRmlsZUNvbnRlbnRTdGF0ZTo6
Tm9GaWxlT3JJbWFnZURhdGEgOiBGaWxlQ29udGVudFN0YXRlOjpNYXlDb250YWluRmlsZVBhdGhz
OworICAgIGlmIChtX3NlbGVjdGlvbkRhdGEpCisgICAgICAgIHJldHVybiBtX3NlbGVjdGlvbkRh
dGEtPmZpbGVuYW1lcygpLmlzRW1wdHkoKSA/IEZpbGVDb250ZW50U3RhdGU6Ok5vRmlsZU9ySW1h
Z2VEYXRhIDogRmlsZUNvbnRlbnRTdGF0ZTo6TWF5Q29udGFpbkZpbGVQYXRoczsKKworICAgIGF1
dG8gdHlwZXMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnR5
cGVzKG1fbmFtZSk7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0L3VyaS1saXN0Il9zKSkK
KyAgICAgICAgcmV0dXJuIEZpbGVDb250ZW50U3RhdGU6Ok1heUNvbnRhaW5GaWxlUGF0aHM7CisK
KyAgICBhdXRvIHJlc3VsdCA9IHR5cGVzLmZpbmRNYXRjaGluZyhbXShjb25zdCBTdHJpbmcmIHR5
cGUpIHsKKyAgICAgICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZSh0eXBlKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0ID09IG5vdEZvdW5kID8g
RmlsZUNvbnRlbnRTdGF0ZTo6Tm9GaWxlT3JJbWFnZURhdGEgOiBGaWxlQ29udGVudFN0YXRlOjpN
YXlDb250YWluRmlsZVBhdGhzOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlTWFya3VwKGNv
bnN0IFN0cmluZyYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEhlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEhlbHBlci5jcHAKaW5kZXggNTc0OTY2YTU5ZmJmLi41MWM4ZDk4ZDI4YzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKQEAgLTI4LDcg
KzI4LDYgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkRh
dGEuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+
CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIApAQCAtOTYsNDEgKzk1LDYgQEAgc3RhdGljIFN0cmluZyBzZWxlY3Rpb25EYXRh
VG9VVEY4U3RyaW5nKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEpCiAgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgobWFya3VwU3RyaW5nLmdldCgpKTsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkSGVscGVy
OjpnZXRDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgU2VsZWN0aW9u
RGF0YSYgc2VsZWN0aW9uKQotewotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGV4dF9h
dmFpbGFibGUoY2xpcGJvYXJkKSkgewotICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiB0ZXh0RGF0
YShndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQoY2xpcGJvYXJkKSk7Ci0gICAgICAgIGlmICh0
ZXh0RGF0YSkKLSAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRUZXh0KFN0cmluZzo6ZnJvbVVURjgo
dGV4dERhdGEuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lz
X3RhcmdldF9hdmFpbGFibGUoY2xpcGJvYXJkLCBtYXJrdXBBdG9tKSkgewotICAgICAgICBpZiAo
R3RrU2VsZWN0aW9uRGF0YSogZGF0YSA9IGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfY29udGVudHMo
Y2xpcGJvYXJkLCBtYXJrdXBBdG9tKSkgewotICAgICAgICAgICAgU3RyaW5nIG1hcmt1cChzZWxl
Y3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRhdGEpKTsKLSAgICAgICAgICAgIHJlbW92ZU1hcmt1cFBy
ZWZpeChtYXJrdXApOwotICAgICAgICAgICAgc2VsZWN0aW9uLnNldE1hcmt1cChtYXJrdXApOwot
ICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2ZyZWUoZGF0YSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xp
cGJvYXJkLCB1cmlMaXN0QXRvbSkpIHsKLSAgICAgICAgaWYgKEd0a1NlbGVjdGlvbkRhdGEqIGRh
dGEgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2FyZCwgdXJpTGlzdEF0
b20pKSB7Ci0gICAgICAgICAgICBzZWxlY3Rpb24uc2V0VVJJTGlzdChzZWxlY3Rpb25EYXRhVG9V
VEY4U3RyaW5nKGRhdGEpKTsKLSAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9mcmVlKGRh
dGEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc19p
bWFnZV9hdmFpbGFibGUoY2xpcGJvYXJkKSkgewotICAgICAgICBpZiAoR1JlZlB0cjxHZGtQaXhi
dWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2ltYWdlKGNsaXBi
b2FyZCkpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0g
YWRvcHRSZWYoZ2RrX2NhaXJvX3N1cmZhY2VfY3JlYXRlX2Zyb21fcGl4YnVmKHBpeGJ1Zi5nZXQo
KSwgMSwgbnVsbHB0cikpOwotICAgICAgICAgICAgUmVmPEltYWdlPiBpbWFnZSA9IEJpdG1hcElt
YWdlOjpjcmVhdGUoV1RGTW92ZShzdXJmYWNlKSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb24uc2V0
SW1hZ2UoaW1hZ2UucHRyKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2VsZWN0aW9uLnNl
dENhblNtYXJ0UmVwbGFjZShndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGFyZ2V0X2F2YWlsYWJsZShj
bGlwYm9hcmQsIHNtYXJ0UGFzdGVBdG9tKSk7Ci19Ci0KIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4g
UGFzdGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlzdEZvclNlbGVjdGlvbkRhdGEoY29uc3QgU2VsZWN0
aW9uRGF0YSYgc2VsZWN0aW9uKQogewogICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gbGlzdCA9
IGFkb3B0R1JlZihndGtfdGFyZ2V0X2xpc3RfbmV3KG51bGxwdHIsIDApKTsKQEAgLTI2NSw1NyAr
MjI5LDYgQEAgVmVjdG9yPEdka0F0b20+IFBhc3RlYm9hcmRIZWxwZXI6OmRyb3BBdG9tc0ZvckNv
bnRleHQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWcKICAgICByZXR1cm4gZHJvcEF0b21zOwog
fQogCi1zdGF0aWMgU2VsZWN0aW9uRGF0YSogc2V0dGluZ0NsaXBib2FyZFNlbGVjdGlvbjsKLQot
c3RydWN0IENsaXBib2FyZFNldERhdGEgewotICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9D
QVRFRDsKLSAgICBDbGlwYm9hcmRTZXREYXRhKFNlbGVjdGlvbkRhdGEmIHNlbGVjdGlvbiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+JiYgc2VsZWN0aW9uQ2xlYXJlZENhbGxiYWNrKQotICAgICAgICA6
IHNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uKQotICAgICAgICAsIHNlbGVjdGlvbkNsZWFyZWRDYWxs
YmFjayhXVEZNb3ZlKHNlbGVjdGlvbkNsZWFyZWRDYWxsYmFjaykpCi0gICAgewotICAgIH0KLQot
ICAgIH5DbGlwYm9hcmRTZXREYXRhKCkgPSBkZWZhdWx0OwotCi0gICAgUmVmPFNlbGVjdGlvbkRh
dGE+IHNlbGVjdGlvbkRhdGE7Ci0gICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IHNlbGVjdGlvbkNs
ZWFyZWRDYWxsYmFjazsKLX07Ci0KLXN0YXRpYyB2b2lkIGdldENsaXBib2FyZENvbnRlbnRzQ2Fs
bGJhY2soR3RrQ2xpcGJvYXJkKiwgR3RrU2VsZWN0aW9uRGF0YSAqc2VsZWN0aW9uRGF0YSwgZ3Vp
bnQgaW5mbywgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgYXV0byogZGF0YSA9IHN0YXRpY19j
YXN0PENsaXBib2FyZFNldERhdGEqPih1c2VyRGF0YSk7Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6
c2luZ2xldG9uKCkuZmlsbFNlbGVjdGlvbkRhdGEoZGF0YS0+c2VsZWN0aW9uRGF0YSwgaW5mbywg
c2VsZWN0aW9uRGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyQ2xpcGJvYXJkQ29udGVudHND
YWxsYmFjayhHdGtDbGlwYm9hcmQqLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2xpcGJvYXJkU2V0RGF0YT4gZGF0YShzdGF0aWNfY2FzdDxDbGlwYm9hcmRTZXRE
YXRhKj4odXNlckRhdGEpKTsKLSAgICBpZiAoZGF0YS0+c2VsZWN0aW9uQ2xlYXJlZENhbGxiYWNr
KQotICAgICAgICBkYXRhLT5zZWxlY3Rpb25DbGVhcmVkQ2FsbGJhY2soKTsKLX0KLQotdm9pZCBQ
YXN0ZWJvYXJkSGVscGVyOjp3cml0ZUNsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCogY2xp
cGJvYXJkLCBjb25zdCBTZWxlY3Rpb25EYXRhJiBzZWxlY3Rpb24sIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmIHByaW1hcnlTZWxlY3Rpb25DbGVhcmVkKQotewotICAgIEdSZWZQdHI8R3RrVGFyZ2V0
TGlzdD4gbGlzdCA9IHRhcmdldExpc3RGb3JTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbik7Ci0KLSAg
ICBpbnQgbnVtYmVyT2ZUYXJnZXRzOwotICAgIEd0a1RhcmdldEVudHJ5KiB0YWJsZSA9IGd0a190
YXJnZXRfdGFibGVfbmV3X2Zyb21fbGlzdChsaXN0LmdldCgpLCAmbnVtYmVyT2ZUYXJnZXRzKTsK
LQotICAgIGlmIChudW1iZXJPZlRhcmdldHMgPiAwICYmIHRhYmxlKSB7Ci0gICAgICAgIFNldEZv
clNjb3BlPFNlbGVjdGlvbkRhdGEqPiBjaGFuZ2Uoc2V0dGluZ0NsaXBib2FyZFNlbGVjdGlvbiwg
Y29uc3RfY2FzdDxTZWxlY3Rpb25EYXRhKj4oJnNlbGVjdGlvbikpOwotICAgICAgICBhdXRvIGRh
dGEgPSBtYWtlVW5pcXVlPENsaXBib2FyZFNldERhdGE+KCpzZXR0aW5nQ2xpcGJvYXJkU2VsZWN0
aW9uLCBXVEZNb3ZlKHByaW1hcnlTZWxlY3Rpb25DbGVhcmVkKSk7Ci0gICAgICAgIGlmIChndGtf
Y2xpcGJvYXJkX3NldF93aXRoX2RhdGEoY2xpcGJvYXJkLCB0YWJsZSwgbnVtYmVyT2ZUYXJnZXRz
LCBnZXRDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLCBjbGVhckNsaXBib2FyZENvbnRlbnRzQ2Fs
bGJhY2ssIGRhdGEuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBndGtfY2xpcGJvYXJkX3NldF9jYW5f
c3RvcmUoY2xpcGJvYXJkLCBudWxscHRyLCAwKTsKLSAgICAgICAgICAgIC8vIFdoZW4gZ3RrX2Ns
aXBib2FyZF9zZXRfd2l0aF9kYXRhKCkgc3VjY2VlZHMgY2xlYXJDbGlwYm9hcmRDb250ZW50c0Nh
bGxiYWNrIHRha2VzIHRoZSBvd25lcnNoaXAgb2YgZGF0YSwgc28gd2UgbGVhayBpdCBoZXJlLgot
ICAgICAgICAgICAgZGF0YS5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAg
ICAgZ3RrX2NsaXBib2FyZF9jbGVhcihjbGlwYm9hcmQpOwotCi0gICAgaWYgKHRhYmxlKQotICAg
ICAgICBndGtfdGFyZ2V0X3RhYmxlX2ZyZWUodGFibGUsIG51bWJlck9mVGFyZ2V0cyk7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vICFVU0UoR1RLNCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCmluZGV4IDRjM2Y0NTEw
ODFlNi4uNTU5YjY2NzBlMGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGFzdGVib2FyZEhlbHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkSGVscGVyLmgKQEAgLTQwLDE1ICs0MCwxMSBAQCBjbGFzcyBQYXN0ZWJvYXJkSGVs
cGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzdGVib2FyZEhlbHBlciYgc2luZ2xldG9uKCk7
CiAKLSAgICBlbnVtIFNtYXJ0UGFzdGVJbmNsdXNpb24geyBJbmNsdWRlU21hcnRQYXN0ZSwgRG9O
b3RJbmNsdWRlU21hcnRQYXN0ZSB9OwotCiAgICAgR3RrVGFyZ2V0TGlzdCogdGFyZ2V0TGlzdCgp
IGNvbnN0OwogICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gdGFyZ2V0TGlzdEZvclNlbGVjdGlv
bkRhdGEoY29uc3QgU2VsZWN0aW9uRGF0YSYpOwogICAgIHZvaWQgZmlsbFNlbGVjdGlvbkRhdGEo
Y29uc3QgU2VsZWN0aW9uRGF0YSYsIHVuc2lnbmVkLCBHdGtTZWxlY3Rpb25EYXRhKik7CiAgICAg
dm9pZCBmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRhKiwgdW5zaWduZWQsIFNlbGVj
dGlvbkRhdGEmKTsKICAgICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21zRm9yQ29udGV4dChHdGtX
aWRnZXQqLCBHZGtEcmFnQ29udGV4dCopOwotICAgIHZvaWQgd3JpdGVDbGlwYm9hcmRDb250ZW50
cyhHdGtDbGlwYm9hcmQqLCBjb25zdCBTZWxlY3Rpb25EYXRhJiwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgcHJpbWFyeVNlbGVjdGlvbkNsZWFyZWQgPSBudWxscHRyKTsKLSAgICB2b2lkIGdldENs
aXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCosIFNlbGVjdGlvbkRhdGEmKTsKIAogICAgIGVu
dW0gUGFzdGVib2FyZFRhcmdldFR5cGUgeyBUYXJnZXRUeXBlTWFya3VwLCBUYXJnZXRUeXBlVGV4
dCwgVGFyZ2V0VHlwZUltYWdlLCBUYXJnZXRUeXBlVVJJTGlzdCwgVGFyZ2V0VHlwZU5ldHNjYXBl
VVJMLCBUYXJnZXRUeXBlU21hcnRQYXN0ZSwgVGFyZ2V0VHlwZVVua25vd24gfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtUGFzdGVib2FyZEd0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJkR3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM5N2U5ZmYzZmMwLi4wMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtUGFzdGVib2FyZEd0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAo
QykgMjAxNiBSZWQgSGF0IEluYy4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVBhc3RlYm9hcmQuaCIKLQotI2lu
Y2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgotI2luY2x1ZGUg
IlNlbGVjdGlvbkRhdGEuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxn
dGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSNpZiBVU0UoR1RLNCkKLVBsYXRmb3JtUGFzdGVib2FyZDo6UGxhdGZvcm1QYXN0ZWJvYXJkKGNv
bnN0IFN0cmluZyYpCi17Ci19Ci0jZWxzZQotUGxhdGZvcm1QYXN0ZWJvYXJkOjpQbGF0Zm9ybVBh
c3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKLSAgICA6IG1fY2xpcGJvYXJk
KGd0a19jbGlwYm9hcmRfZ2V0KGdka19hdG9tX2ludGVybihwYXN0ZWJvYXJkTmFtZS51dGY4KCku
ZGF0YSgpLCBUUlVFKSkpCi17Ci0gICAgQVNTRVJUKG1fY2xpcGJvYXJkKTsKLX0KLSNlbmRpZgot
Ci12b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGVUb0NsaXBib2FyZChjb25zdCBTZWxlY3Rp
b25EYXRhJiBzZWxlY3Rpb24sIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIHByaW1hcnlTZWxlY3Rp
b25DbGVhcmVkKQotewotI2lmICFVU0UoR1RLNCkKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpzaW5n
bGV0b24oKS53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkLCBzZWxlY3Rpb24sIGd0
a19jbGlwYm9hcmRfZ2V0KEdES19TRUxFQ1RJT05fUFJJTUFSWSkgPT0gbV9jbGlwYm9hcmQgPyBX
VEZNb3ZlKHByaW1hcnlTZWxlY3Rpb25DbGVhcmVkKSA6IG51bGxwdHIpOwotI2VuZGlmCi19Ci0K
LVJlZjxTZWxlY3Rpb25EYXRhPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnJlYWRGcm9tQ2xpcGJvYXJk
KCkKLXsKLSAgICBSZWY8U2VsZWN0aW9uRGF0YT4gc2VsZWN0aW9uKFNlbGVjdGlvbkRhdGE6OmNy
ZWF0ZSgpKTsKLSNpZiAhVVNFKEdUSzQpCi0gICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9u
KCkuZ2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQsIHNlbGVjdGlvbi5nZXQoKSk7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gc2VsZWN0aW9uOwotfQotCi1WZWN0b3I8U3RyaW5nPiBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotaW50NjRfdCBQbGF0Zm9ybVBhc3RlYm9h
cmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJikKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotaW50NjRfdCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFZlY3RvcjxQYXN0
ZWJvYXJkQ3VzdG9tRGF0YT4mKQotewotICAgIHJldHVybiAwOwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VsZWN0aW9uRGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VsZWN0aW9uRGF0YS5jcHAKaW5kZXggODJmZTQ3MWE1OWMx
Li5lODRjMzVkYzNlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9T
ZWxlY3Rpb25EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2VsZWN0
aW9uRGF0YS5jcHAKQEAgLTgwLDcgKzgwLDExIEBAIHZvaWQgU2VsZWN0aW9uRGF0YTo6c2V0VVJM
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewogICAgIG1fdXJsID0gdXJs
OwogICAgIG1fdXJpTGlzdCA9IHVybDsKLSAgICBzZXRUZXh0KHVybC5zdHJpbmcoKSk7CisgICAg
aWYgKCFoYXNUZXh0KCkpCisgICAgICAgIHNldFRleHQodXJsLnN0cmluZygpKTsKKworICAgIGlm
IChoYXNNYXJrdXAoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGFjdHVhbExhYmVs
KGxhYmVsKTsKICAgICBpZiAoYWN0dWFsTGFiZWwuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5YTgy
NGVkODY3YWIuLmM1MjgzY2IyNWVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAyMC0w
NS0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW0dUS10gUmV3b3JrIGNsaXBib2FyZCBoYW5kbGluZyBpbiBwcmVwYXJhdGlvbiBmb3IgR1RL
NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNTEx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGFz
eW5jIEFQSXMgdG8gYXZvaWQgYmxvY2tpbmcgdGhlIFVJIHByb2Nlc3MgZHVyaW5nIHRoZSBjb21t
dW5pY2F0aW9uIHdpdGggdGhlIGNsaXBib2FyZC4gSW4gR1RLNCBvbmx5IGFzeW5jCisgICAgICAg
IEFQSXMgYXJlIGF2YWlsYWJsZS4gQWRkIENsaXBib2FyZCBjbGFzcyB0byBoYW5kbGUgdGhlIGNv
bW11bmljYXRpb24gd2l0aCB0aGUgY2xpcGJvYXJkIHdpdGggdGhlIEdUSworICAgICAgICBpbXBs
ZW1lbnRhdGlvbiBpbiBDbGlwYm9hcmRHdGszIGFuZCBDbGlwYm9hcmRHdGs0IGZpbGVzLgorCisg
ICAgICAgICogU2hhcmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRhLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViU2VsZWN0aW9uRGF0YTo6V2ViU2VsZWN0aW9uRGF0YSk6IEFkZCBjb25zdHJ1Y3RvciBy
ZWNlaXZuaWcgYW4gcnZhbHVlIHJlZmVyZW5jZS4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYlNl
bGVjdGlvbkRhdGEuaDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhc3Rl
Ym9hcmRQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0NsaXBib2Fy
ZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpjbGlwYm9hcmQpOgorICAgICAgICAoV2Vi
S2l0OjpwcmltYXJ5KToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpnZXQpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9ndGsvQ2xpcGJvYXJkR3RrMy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9h
cmQ6OkNsaXBib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OmlzUHJpbWFyeUNsaXBib2FyZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OkZvcm1hdHNBc3luY0RhdGE6OkZvcm1hdHNBc3luY0RhdGEpOgorICAgICAgICAoV2ViS2l0OjpD
bGlwYm9hcmQ6OmZvcm1hdHMpOgorICAgICAgICAoV2ViS2l0OjpSZWFkVGV4dEFzeW5jRGF0YTo6
UmVhZFRleHRBc3luY0RhdGEpOgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OnJlYWRUZXh0
KToKKyAgICAgICAgKFdlYktpdDo6UmVhZEZpbGVQYXRoc0FzeW5jRGF0YTo6UmVhZEZpbGVQYXRo
c0FzeW5jRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6cmVhZEZpbGVQYXRocyk6
CisgICAgICAgIChXZWJLaXQ6OlJlYWRCdWZmZXJBc3luY0RhdGE6OlJlYWRCdWZmZXJBc3luY0Rh
dGEpOgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OnJlYWRCdWZmZXIpOgorICAgICAgICAo
V2ViS2l0OjpDbGlwYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpj
bGVhcik6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGs0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6Q2xpcGJvYXJkKToKKyAgICAgICAgKFdlYktp
dDo6Q2xpcGJvYXJkOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpm
b3JtYXRzKToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpyZWFkVGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OkNsaXBib2FyZDo6cmVhZEZpbGVQYXRocyk6CisgICAgICAgIChXZWJLaXQ6OkNs
aXBib2FyZDo6cmVhZEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6d3JpdGUp
OgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OmNsZWFyKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL1dlYlBhc3RlYm9hcmRQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
c3RlYm9hcmRQcm94eTo6Z2V0VHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJk
UHJveHk6OnJlYWRUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5Ojpy
ZWFkRmlsZVBhdGhzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpyZWFk
QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVRvQ2xp
cGJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpjbGVhckNsaXBi
b2FyZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnR5
cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkVGV4dEZy
b21DbGlwYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJl
YWRGaWxlUGF0aHNGcm9tQ2xpcGJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpyZWFkQnVmZmVyRnJvbUNsaXBib2FyZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb0NsaXBib2FyZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y2xlYXJDbGlwYm9hcmQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6CisKIDIwMjAtMDUt
MDIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgaGFu
ZGxlV2hlZWxFdmVudFBoYXNlKCkgc2hvdWxkIGluY2x1ZGUgdGhlIHJlbGV2YW50IFNjcm9sbGlu
Z05vZGVJRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVjdGlv
bkRhdGEuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEuY3Bw
CmluZGV4IDE5ZmMyNGFjNjlkNi4uOWI1MDZiMzViM2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9ndGsvV2ViU2VsZWN0aW9uRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEuY3BwCkBAIC00MSw2ICs0MSwxMSBAQCBXZWJTZWxl
Y3Rpb25EYXRhOjpXZWJTZWxlY3Rpb25EYXRhKFJlZjxXZWJDb3JlOjpTZWxlY3Rpb25EYXRhPiYm
IGRhdGEpCiB7CiB9CiAKK1dlYlNlbGVjdGlvbkRhdGE6OldlYlNlbGVjdGlvbkRhdGEoV2ViQ29y
ZTo6U2VsZWN0aW9uRGF0YSYmIGRhdGEpCisgICAgOiBzZWxlY3Rpb25EYXRhKGRhdGEpCit7Cit9
CisKIHZvaWQgV2ViU2VsZWN0aW9uRGF0YTo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHNlbGVjdGlvbkRhdGEuZ2V0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvV2ViU2VsZWN0aW9uRGF0YS5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEuaAppbmRleCBkZDZkYWFlNDA4MzkuLjIw
NWY4ZWVjMDJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVj
dGlvbkRhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvV2ViU2VsZWN0aW9uRGF0
YS5oCkBAIC0zMSw2ICszMSw3IEBAIHN0cnVjdCBXZWJTZWxlY3Rpb25EYXRhIHsKICAgICBXZWJT
ZWxlY3Rpb25EYXRhKCk7CiAgICAgZXhwbGljaXQgV2ViU2VsZWN0aW9uRGF0YShjb25zdCBXZWJD
b3JlOjpTZWxlY3Rpb25EYXRhJik7CiAgICAgZXhwbGljaXQgV2ViU2VsZWN0aW9uRGF0YShSZWY8
V2ViQ29yZTo6U2VsZWN0aW9uRGF0YT4mJik7CisgICAgZXhwbGljaXQgV2ViU2VsZWN0aW9uRGF0
YShXZWJDb3JlOjpTZWxlY3Rpb25EYXRhJiYpOwogCiAgICAgUmVmPFdlYkNvcmU6OlNlbGVjdGlv
bkRhdGE+IHNlbGVjdGlvbkRhdGE7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNl
c0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IDNmYmNiNDE0ODQ1
MC4uZGRiZjA2ZDQxN2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKQEAgLTI1Myw2ICsyNTMsOSBAQCBV
SVByb2Nlc3MvZ3N0cmVhbWVyL1dlYlBhZ2VQcm94eUdTdHJlYW1lci5jcHAKIFVJUHJvY2Vzcy9n
dGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9B
Y2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0
ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVgxMS5jcHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvZ3Rr
L0NsaXBib2FyZC5jcHAKK1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkR3RrMy5jcHAKK1VJUHJvY2Vz
cy9ndGsvQ2xpcGJvYXJkR3RrNC5jcHAKIFVJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVy
LmNwcAogVUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9ndGsv
SGFyZHdhcmVBY2NlbGVyYXRpb25NYW5hZ2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYXN0ZWJvYXJkUHJveHkuaAppbmRleCA0NzBmNTk5ZTAzZGUuLjdiOGFiYTg0YzhjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKQEAgLTM0
LDYgKzM0LDEwIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvV2Vh
a0hhc2hTZXQuaD4KIAorbmFtZXNwYWNlIElQQyB7CitjbGFzcyBTaGFyZWRCdWZmZXJEYXRhUmVm
ZXJlbmNlOworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIFBh
c3RlYm9hcmRDdXN0b21EYXRhOwpAQCAtNjYsNiArNzAsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFU
Rk9STShHVEspCiAgICAgdm9pZCBzZXRQcmltYXJ5U2VsZWN0aW9uT3duZXIoV2ViRnJhbWVQcm94
eSopOworICAgIFdlYkZyYW1lUHJveHkqIHByaW1hcnlTZWxlY3Rpb25Pd25lcigpIGNvbnN0IHsg
cmV0dXJuIG1fcHJpbWFyeVNlbGVjdGlvbk93bmVyOyB9CiAgICAgdm9pZCBkaWREZXN0cm95RnJh
bWUoV2ViRnJhbWVQcm94eSopOwogI2VuZGlmCiAKQEAgLTExOCwxMSArMTIzLDE0IEBAIHByaXZh
dGU6CiAgICAgdm9pZCB1cmxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcoSVBDOjpDb25uZWN0aW9u
JiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
dHJpbmcmJiB1cmwsIFN0cmluZyYmIHRpdGxlKT4mJik7CiAKICNpZiBQTEFURk9STShHVEspCi0g
ICAgdm9pZCB3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNv
bnN0IFdlYlNlbGVjdGlvbkRhdGEmKTsKLSAgICB2b2lkIHJlYWRGcm9tQ2xpcGJvYXJkKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViU2VsZWN0
aW9uRGF0YSYmKT4mJik7CisgICAgdm9pZCBnZXRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKKyAg
ICB2b2lkIHJlYWRUZXh0KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmKTsKKyAgICB2b2lkIHJlYWRGaWxlUGF0aHMoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3Ry
aW5nPiYmKT4mJik7CisgICAgdm9pZCByZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoSVBDOjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlJiYpPiYmKTsKKyAgICB2b2lkIHdyaXRl
VG9DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV2ViU2VsZWN0aW9uRGF0
YSYmKTsKKyAgICB2b2lkIGNsZWFyQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpOwogCiAgICAgV2ViRnJhbWVQcm94eSogbV9wcmltYXJ5U2VsZWN0aW9uT3duZXIgeyBudWxs
cHRyIH07Ci0gICAgV2ViRnJhbWVQcm94eSogbV9mcmFtZVdyaXRpbmdUb0NsaXBib2FyZCB7IG51
bGxwdHIgfTsKICNlbmRpZiAvLyBQTEFURk9STShHVEspCiAKICNpZiBVU0UoTElCV1BFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3Nh
Z2VzLmluCmluZGV4IDg4YzMwNjA5ODkwNS4uN2ZkNzY3ZmVhN2ZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCkBA
IC02MSw4ICs2MSwxMiBAQCBtZXNzYWdlcyAtPiBXZWJQYXN0ZWJvYXJkUHJveHkgTm90UmVmQ291
bnRlZCB7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHZXRUeXBlcyhTdHJpbmcg
cGFzdGVib2FyZE5hbWUpIC0+IChWZWN0b3I8U3RyaW5nPiB0eXBlcykgU3luY2hyb25vdXMKKyAg
ICBSZWFkVGV4dChTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChTdHJpbmcgdGV4dCkgU3luY2hy
b25vdXMKKyAgICBSZWFkRmlsZVBhdGhzKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKFZlY3Rv
cjxTdHJpbmc+IHR5cGVzKSBTeW5jaHJvbm91cworICAgIFJlYWRCdWZmZXIoU3RyaW5nIHBhc3Rl
Ym9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChJUEM6OlNoYXJlZEJ1ZmZlckRh
dGFSZWZlcmVuY2UgZGF0YSkgU3luY2hyb25vdXMKICAgICBXcml0ZVRvQ2xpcGJvYXJkKFN0cmlu
ZyBwYXN0ZWJvYXJkTmFtZSwgc3RydWN0IFdlYktpdDo6V2ViU2VsZWN0aW9uRGF0YSBwYXN0ZWJv
YXJkQ29udGVudCkKLSAgICBSZWFkRnJvbUNsaXBib2FyZChTdHJpbmcgcGFzdGVib2FyZE5hbWUp
IC0+IChzdHJ1Y3QgV2ViS2l0OjpXZWJTZWxlY3Rpb25EYXRhIHBhc3RlYm9hcmRDb250ZW50KSBT
eW5jaHJvbm91cworICAgIENsZWFyQ2xpcGJvYXJkKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkKICNl
bmRpZgogCiAjaWYgVVNFKExJQldQRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2d0ay9DbGlwYm9hcmQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBi
b2FyZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNDk3NTM3
NjAyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xp
cGJvYXJkLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNsaXBib2Fy
ZC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIENsaXBib2FyZCYgY2xpcGJvYXJk
KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxDbGlwYm9hcmQ+IG9iamVjdDsKKworICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbXSB7CisgICAgICAgIG9iamVjdC5jb25zdHJ1Y3QoQ2xpcGJvYXJkOjpUeXBl
OjpDbGlwYm9hcmQpOworICAgIH0pOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGlj
IENsaXBib2FyZCYgcHJpbWFyeSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VG
bGFnOworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8Q2xpcGJvYXJkPiBvYmplY3Q7CisK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBvYmplY3QuY29uc3Ry
dWN0KENsaXBib2FyZDo6VHlwZTo6UHJpbWFyeSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gb2Jq
ZWN0OworfQorCitDbGlwYm9hcmQmIENsaXBib2FyZDo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBpZiAobmFtZSA9PSAiQ0xJUEJPQVJEIikKKyAgICAgICAgcmV0dXJuIGNsaXBib2Fy
ZCgpOworCisgICAgaWYgKG5hbWUgPT0gIlBSSU1BUlkiKQorICAgICAgICByZXR1cm4gcHJpbWFy
eSgpOworCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xp
cGJvYXJkLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZDNlYzc1MTI0OTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmgKQEAgLTAs
MCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworI2lmICFVU0UoR1RL
NCkKK3R5cGVkZWYgc3RydWN0IF9HdGtDbGlwYm9hcmQgR3RrQ2xpcGJvYXJkOworI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNlbGVjdGlvbkRhdGE7CitjbGFzcyBTaGFyZWRC
dWZmZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJGcmFtZVByb3h5Owor
CitjbGFzcyBDbGlwYm9hcmQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENsaXBib2FyZCk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBDbGlwYm9hcmQm
IGdldChjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgZW51bSBjbGFzcyBUeXBlIHsgQ2xpcGJv
YXJkLCBQcmltYXJ5IH07CisgICAgZXhwbGljaXQgQ2xpcGJvYXJkKFR5cGUpOworCisgICAgVHlw
ZSB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBmb3JtYXRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFN0cmluZz4mJik+JiYpOworICAgIHZvaWQgcmVhZFRleHQoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTdHJpbmcmJik+JiYpOworICAgIHZvaWQgcmVhZEZpbGVQYXRocyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKKyAgICB2b2lkIHJlYWRCdWZmZXIo
Y29uc3QgY2hhciosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4mJik+JiYpOworICAgIHZvaWQgd3JpdGUoUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+
JiYpOworICAgIHZvaWQgY2xlYXIoKTsKKworcHJpdmF0ZToKKyNpZiAhVVNFKEdUSzQpCisgICAg
R3RrQ2xpcGJvYXJkKiBtX2NsaXBib2FyZCB7IG51bGxwdHIgfTsKKyAgICBXZWJGcmFtZVByb3h5
KiBtX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkIHsgbnVsbHB0ciB9OworI2VuZGlmCit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9DbGlwYm9hcmRHdGszLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9DbGlw
Ym9hcmRHdGszLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmVm
MjQ0YmJmMDA5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9DbGlwYm9hcmRHdGszLmNwcApAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDbGlwYm9hcmQuaCIKKworI2lmICFVU0UoR1RLNCkKKworI2luY2x1ZGUgIldlYlBhc3RlYm9h
cmRQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0ckd0ay5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU2VsZWN0aW9uRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworQ2xpcGJvYXJkOjpDbGlwYm9hcmQoVHlwZSB0eXBlKQorICAg
IDogbV9jbGlwYm9hcmQoZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlf
Z2V0X2RlZmF1bHQoKSwgdHlwZSA9PSBUeXBlOjpDbGlwYm9hcmQgPyBHREtfU0VMRUNUSU9OX0NM
SVBCT0FSRCA6IEdES19TRUxFQ1RJT05fUFJJTUFSWSkpCit7Cit9CisKK3N0YXRpYyBib29sIGlz
UHJpbWFyeUNsaXBib2FyZChHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKK3sKKyAgICByZXR1cm4g
Y2xpcGJvYXJkID09IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dl
dF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fUFJJTUFSWSk7Cit9CisKK0NsaXBib2FyZDo6VHlw
ZSBDbGlwYm9hcmQ6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBpc1ByaW1hcnlDbGlwYm9h
cmQobV9jbGlwYm9hcmQpID8gVHlwZTo6UHJpbWFyeSA6IFR5cGU6OkNsaXBib2FyZDsKK30KKwor
c3RydWN0IEZvcm1hdHNBc3luY0RhdGEgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9D
QVRFRDsKKworICAgIGV4cGxpY2l0IEZvcm1hdHNBc3luY0RhdGEoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBoYW5kbGVyKQorICAgICAgICA6IGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoaGFuZGxlcikpCisgICAgeworICAgIH0KKworICAgIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+IGNvbXBsZXRpb25IYW5kbGVyOworfTsKKwor
dm9pZCBDbGlwYm9hcmQ6OmZvcm1hdHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3Ry
aW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBndGtfY2xpcGJvYXJkX3JlcXVl
c3RfdGFyZ2V0cyhtX2NsaXBib2FyZCwgW10oR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEdka0F0
b20qIGF0b21zLCBnaW50IGF0b21zQ291bnQsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxGb3JtYXRzQXN5bmNEYXRhPiBkYXRhKHN0YXRpY19jYXN0PEZvcm1h
dHNBc3luY0RhdGEqPih1c2VyRGF0YSkpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHJlc3Vs
dDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdG9tc0NvdW50OyArK2kpIHsKKyAgICAg
ICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gYXRvbShnZGtfYXRvbV9uYW1lKGF0b21zW2ldKSk7Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoYXRvbS5nZXQoKSkpOwor
ICAgICAgICB9CisgICAgICAgIGRhdGEtPmNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0
KSk7CisgICAgfSwgbmV3IEZvcm1hdHNBc3luY0RhdGEoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpKTsKK30KKworc3RydWN0IFJlYWRUZXh0QXN5bmNEYXRhIHsKKyAgICBXVEZfTUFLRV9TVFJV
Q1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICBleHBsaWNpdCBSZWFkVGV4dEFzeW5jRGF0YShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBoYW5kbGVyKQorICAgICAgICA6IGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlcikpCisgICAgeworICAgIH0KKworICAgIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiBjb21wbGV0aW9uSGFuZGxlcjsKK307CisKK3Zv
aWQgQ2xpcGJvYXJkOjpyZWFkVGV4dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBndGtfY2xpcGJvYXJkX3JlcXVlc3RfdGV4dCht
X2NsaXBib2FyZCwgW10oR3RrQ2xpcGJvYXJkKiwgY29uc3QgY2hhciogdGV4dCwgZ3BvaW50ZXIg
dXNlckRhdGEpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlYWRUZXh0QXN5bmNEYXRhPiBk
YXRhKHN0YXRpY19jYXN0PFJlYWRUZXh0QXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKyAgICAgICAg
ZGF0YS0+Y29tcGxldGlvbkhhbmRsZXIoU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KSk7CisgICAgfSwg
bmV3IFJlYWRUZXh0QXN5bmNEYXRhKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Cit9CisK
K3N0cnVjdCBSZWFkRmlsZVBhdGhzQXN5bmNEYXRhIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQ7CisKKyAgICBleHBsaWNpdCBSZWFkRmlsZVBhdGhzQXN5bmNEYXRhKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgaGFuZGxlcikKKyAgICAgICAg
OiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZXIpKQorICAgIHsKKyAgICB9CisKKyAg
ICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiBjb21wbGV0aW9uSGFu
ZGxlcjsKK307CisKK3ZvaWQgQ2xpcGJvYXJkOjpyZWFkRmlsZVBhdGhzKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
Z3RrX2NsaXBib2FyZF9yZXF1ZXN0X3VyaXMobV9jbGlwYm9hcmQsIFtdKEd0a0NsaXBib2FyZCos
IGNoYXIqKiB1cmlzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVhZEZpbGVQYXRoc0FzeW5jRGF0YT4gZGF0YShzdGF0aWNfY2FzdDxSZWFkRmlsZVBhdGhz
QXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0Owor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyB1cmlzICYmIHVyaXNbaV07ICsraSkgeworICAg
ICAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUoZ19maWxlbmFtZV9mcm9tX3VyaSh1
cmlzW2ldLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAgICAgICBpZiAoZmlsZW5hbWUpCisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lLmdl
dCgpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YS0+Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShyZXN1bHQpKTsKKyAgICB9LCBuZXcgUmVhZEZpbGVQYXRoc0FzeW5jRGF0YShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSkpOworfQorCitzdHJ1Y3QgUmVhZEJ1ZmZlckFzeW5jRGF0YSB7Cisg
ICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgZXhwbGljaXQgUmVhZEJ1
ZmZlckFzeW5jRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+JiYpPiYmIGhhbmRsZXIpCisgICAgICAgIDogY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShoYW5kbGVyKSkKKyAgICB7CisgICAgfQorCisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChS
ZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKT4gY29tcGxldGlvbkhhbmRsZXI7Cit9OworCit2
b2lkIENsaXBib2FyZDo6cmVhZEJ1ZmZlcihjb25zdCBjaGFyKiBmb3JtYXQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgZ3RrX2NsaXBib2FyZF9yZXF1ZXN0X2NvbnRlbnRzKG1fY2xpcGJvYXJk
LCBnZGtfYXRvbV9pbnRlcm4oZm9ybWF0LCBUUlVFKSwgW10oR3RrQ2xpcGJvYXJkKiwgR3RrU2Vs
ZWN0aW9uRGF0YSogc2VsZWN0aW9uLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVhZEJ1ZmZlckFzeW5jRGF0YT4gZGF0YShzdGF0aWNfY2FzdDxSZWFkQnVm
ZmVyQXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKyAgICAgICAgaW50IGNvbnRlbnRzTGVuZ3RoOwor
ICAgICAgICBjb25zdCBhdXRvKiBjb250ZW50cyA9IGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0
YV93aXRoX2xlbmd0aChzZWxlY3Rpb24sICZjb250ZW50c0xlbmd0aCk7CisgICAgICAgIGRhdGEt
PmNvbXBsZXRpb25IYW5kbGVyKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnRz
LCBjb250ZW50c0xlbmd0aCA+IDAgPyBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvbnRlbnRzTGVuZ3Ro
KSA6IDApKTsKKyAgICB9LCBuZXcgUmVhZEJ1ZmZlckFzeW5jRGF0YShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSkpOworfQorCitzdHJ1Y3QgV3JpdGVBc3luY0RhdGEgeworICAgIFdURl9NQUtF
X1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKworICAgIFdyaXRlQXN5bmNEYXRhKFJlZjxXZWJDb3Jl
OjpTZWxlY3Rpb25EYXRhPiYmIHNlbGVjdGlvbiwgQ2xpcGJvYXJkJiBjbGlwYm9hcmQpCisgICAg
ICAgIDogc2VsZWN0aW9uRGF0YShXVEZNb3ZlKHNlbGVjdGlvbikpCisgICAgICAgICwgY2xpcGJv
YXJkKGNsaXBib2FyZCkKKyAgICB7CisgICAgfQorCisgICAgUmVmPFdlYkNvcmU6OlNlbGVjdGlv
bkRhdGE+IHNlbGVjdGlvbkRhdGE7CisgICAgQ2xpcGJvYXJkJiBjbGlwYm9hcmQ7Cit9OworCitl
bnVtIENsaXBib2FyZFRhcmdldFR5cGUgeyBUYXJnZXRUeXBlTWFya3VwLCBUYXJnZXRUeXBlVGV4
dCwgVGFyZ2V0VHlwZUltYWdlLCBUYXJnZXRUeXBlU21hcnRQYXN0ZSB9OworCit2b2lkIENsaXBi
b2FyZDo6d3JpdGUoUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uRGF0YSkK
K3sKKyAgICBTZXRGb3JTY29wZTxXZWJGcmFtZVByb3h5Kj4gZnJhbWVXcml0aW5nVG9DbGlwYm9h
cmQobV9mcmFtZVdyaXRpbmdUb0NsaXBib2FyZCwgV2ViUGFzdGVib2FyZFByb3h5OjpzaW5nbGV0
b24oKS5wcmltYXJ5U2VsZWN0aW9uT3duZXIoKSk7CisKKyAgICBHUmVmUHRyPEd0a1RhcmdldExp
c3Q+IGxpc3QgPSBhZG9wdEdSZWYoZ3RrX3RhcmdldF9saXN0X25ldyhudWxscHRyLCAwKSk7Cisg
ICAgaWYgKHNlbGVjdGlvbkRhdGEtPmhhc01hcmt1cCgpKQorICAgICAgICBndGtfdGFyZ2V0X2xp
c3RfYWRkKGxpc3QuZ2V0KCksIGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0L2h0
bWwiKSwgMCwgVGFyZ2V0VHlwZU1hcmt1cCk7CisgICAgaWYgKHNlbGVjdGlvbkRhdGEtPmhhc0lt
YWdlKCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhsaXN0Lmdl
dCgpLCBUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOworICAgIGlmIChzZWxlY3Rpb25EYXRhLT5oYXNU
ZXh0KCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKGxpc3QuZ2V0
KCksIFRhcmdldFR5cGVUZXh0KTsKKyAgICBpZiAoc2VsZWN0aW9uRGF0YS0+Y2FuU21hcnRSZXBs
YWNlKCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdC5nZXQoKSwgZ2RrX2F0b21f
aW50ZXJuX3N0YXRpY19zdHJpbmcoImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRndGsuc21hcnRwYXN0
ZSIpLCAwLCBUYXJnZXRUeXBlU21hcnRQYXN0ZSk7CisKKyAgICBpbnQgbnVtYmVyT2ZUYXJnZXRz
OworICAgIEd0a1RhcmdldEVudHJ5KiB0YWJsZSA9IGd0a190YXJnZXRfdGFibGVfbmV3X2Zyb21f
bGlzdChsaXN0LmdldCgpLCAmbnVtYmVyT2ZUYXJnZXRzKTsKKyAgICBpZiAoIW51bWJlck9mVGFy
Z2V0cykgeworICAgICAgICBndGtfY2xpcGJvYXJkX2NsZWFyKG1fY2xpcGJvYXJkKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gZGF0YSA9IFdURjo6bWFrZVVuaXF1ZTxXcml0
ZUFzeW5jRGF0YT4oV1RGTW92ZShzZWxlY3Rpb25EYXRhKSwgKnRoaXMpOworICAgIGdib29sZWFu
IHN1Y2NlZWRlZCA9IGd0a19jbGlwYm9hcmRfc2V0X3dpdGhfZGF0YShtX2NsaXBib2FyZCwgdGFi
bGUsIG51bWJlck9mVGFyZ2V0cywKKyAgICAgICAgW10oR3RrQ2xpcGJvYXJkKiwgR3RrU2VsZWN0
aW9uRGF0YSogc2VsZWN0aW9uLCBndWludCBpbmZvLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICAgICAgYXV0byYgZGF0YSA9ICpzdGF0aWNfY2FzdDxXcml0ZUFzeW5jRGF0YSo+KHVzZXJE
YXRhKTsKKyAgICAgICAgICAgIGF1dG8mIHNlbGVjdGlvbkRhdGEgPSBkYXRhLnNlbGVjdGlvbkRh
dGEuZ2V0KCk7CisgICAgICAgICAgICBzd2l0Y2ggKGluZm8pIHsKKyAgICAgICAgICAgIGNhc2Ug
VGFyZ2V0VHlwZU1hcmt1cDogeworICAgICAgICAgICAgICAgIENTdHJpbmcgbWFya3VwID0gc2Vs
ZWN0aW9uRGF0YS5tYXJrdXAoKS51dGY4KCk7CisgICAgICAgICAgICAgICAgZ3RrX3NlbGVjdGlv
bl9kYXRhX3NldChzZWxlY3Rpb24sIGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0
L2h0bWwiKSwgOCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihtYXJrdXAuZGF0YSgp
KSwgbWFya3VwLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgVGFyZ2V0VHlwZVRleHQ6CisgICAgICAgICAgICAgICAgZ3Rr
X3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KHNlbGVjdGlvbiwgc2VsZWN0aW9uRGF0YS50ZXh0KCku
dXRmOCgpLmRhdGEoKSwgLTEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUYXJnZXRUeXBlSW1hZ2U6IHsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uRGF0
YS5oYXNJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBw
aXhidWYgPSBhZG9wdEdSZWYoc2VsZWN0aW9uRGF0YS5pbWFnZSgpLT5nZXRHZGtQaXhidWYoKSk7
CisgICAgICAgICAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfcGl4YnVmKHNlbGVj
dGlvbiwgcGl4YnVmLmdldCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFRhcmdldFR5cGVTbWFydFBh
c3RlOgorICAgICAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfdGV4dChzZWxlY3Rp
b24sICIiLCAtMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisgICAgICAgIFtdKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdyaXRlQXN5bmNEYXRhPiBkYXRh
KHN0YXRpY19jYXN0PFdyaXRlQXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKyAgICAgICAgICAgIGlm
IChpc1ByaW1hcnlDbGlwYm9hcmQoY2xpcGJvYXJkKSAmJiBXZWJQYXN0ZWJvYXJkUHJveHk6OnNp
bmdsZXRvbigpLnByaW1hcnlTZWxlY3Rpb25Pd25lcigpICE9IGRhdGEtPmNsaXBib2FyZC5tX2Zy
YW1lV3JpdGluZ1RvQ2xpcGJvYXJkKQorICAgICAgICAgICAgICAgIFdlYlBhc3RlYm9hcmRQcm94
eTo6c2luZ2xldG9uKCkuc2V0UHJpbWFyeVNlbGVjdGlvbk93bmVyKG51bGxwdHIpOworICAgICAg
ICB9LCBkYXRhLmdldCgpKTsKKworICAgIGlmIChzdWNjZWVkZWQpIHsKKyAgICAgICAgLy8gSW4g
Y2FzZSBvZiBzdWNjZXNzIHRoZSBjbGlwYm9hcmQgb3ducyBkYXRhLCBzbyB3ZSByZWxlYXNlIGl0
IGhlcmUuCisgICAgICAgIGRhdGEucmVsZWFzZSgpOworCisgICAgICAgIGd0a19jbGlwYm9hcmRf
c2V0X2Nhbl9zdG9yZShtX2NsaXBib2FyZCwgbnVsbHB0ciwgMCk7CisgICAgfQorICAgIGd0a190
YXJnZXRfdGFibGVfZnJlZSh0YWJsZSwgbnVtYmVyT2ZUYXJnZXRzKTsKK30KKwordm9pZCBDbGlw
Ym9hcmQ6OmNsZWFyKCkKK3sKKyAgICBndGtfY2xpcGJvYXJkX2NsZWFyKG1fY2xpcGJvYXJkKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uMjBmMWJkOWJhMzUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisKKyNpZiBVU0UoR1RLNCkKKworI2luY2x1
ZGUgPFdlYkNvcmUvU2VsZWN0aW9uRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVm
ZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitDbGlwYm9hcmQ6OkNsaXBib2FyZChUeXBl
KQoreworfQorCitDbGlwYm9hcmQ6OlR5cGUgQ2xpcGJvYXJkOjp0eXBlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gVHlwZTo6Q2xpcGJvYXJkOworfQorCit2b2lkIENsaXBib2FyZDo6Zm9ybWF0cyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQoreworICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJk
OjpyZWFkVGV4dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworfQorCit2b2lkIENsaXBi
b2FyZDo6cmVhZEZpbGVQYXRocyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7
Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpyZWFkQnVmZmVyKGNvbnN0IGNoYXIqIGZvcm1hdCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OmNyZWF0ZSgpKTsKK30KKwordm9pZCBDbGlwYm9hcmQ6OndyaXRlKGNvbnN0IFdlYkNv
cmU6OlNlbGVjdGlvbkRhdGEmKQoreworfQorCit2b2lkIENsaXBib2FyZDo6Y2xlYXIoKQorewor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJveHlHdGsuY3BwCmluZGV4IDllYzhl
ODk1OTk2My4uMGExMzJlYzU1MjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcApAQCAtMjYsMjcgKzI2LDQ1IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGFzdGVib2FyZFByb3h5LmgiCiAKKyNp
bmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNl
LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgogI2luY2x1ZGUgIldlYlNlbGVjdGlvbkRh
dGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVib2FyZC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5Ojp3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFdlYlNlbGVjdGlvbkRhdGEmIHNlbGVjdGlvbikKK3ZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjpnZXRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIFNldEZvclNjb3BlPFdlYkZyYW1lUHJveHkqPiBmcmFtZVdyaXRpbmdUb0NsaXBib2Fy
ZChtX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkLCBtX3ByaW1hcnlTZWxlY3Rpb25Pd25lcik7Ci0g
ICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZVRvQ2xpcGJvYXJkKHNl
bGVjdGlvbi5zZWxlY3Rpb25EYXRhLCBbdGhpc10gewotICAgICAgICBpZiAobV9mcmFtZVdyaXRp
bmdUb0NsaXBib2FyZCA9PSBtX3ByaW1hcnlTZWxlY3Rpb25Pd25lcikKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgc2V0UHJpbWFyeVNlbGVjdGlvbk93bmVyKG51bGxwdHIpOwotICAgIH0p
OworICAgIENsaXBib2FyZDo6Z2V0KHBhc3RlYm9hcmROYW1lKS5mb3JtYXRzKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRGcm9t
Q2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoV2ViU2VsZWN0aW9uRGF0YSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5OjpyZWFkVGV4dChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJTZWxlY3Rpb25EYXRhKFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkucmVhZEZyb21DbGlwYm9hcmQoKSkpOworICAgIENsaXBib2FyZDo6
Z2V0KHBhc3RlYm9hcmROYW1lKS5yZWFkVGV4dChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkRmlsZVBhdGhzKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQ2xpcGJvYXJkOjpnZXQocGFzdGVib2Fy
ZE5hbWUpLnJlYWRGaWxlUGF0aHMoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2
b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKElQQzo6U2hhcmVkQnVmZmVyRGF0YVJlZmVyZW5jZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBDbGlwYm9hcmQ6OmdldChwYXN0ZWJvYXJkTmFtZSkucmVhZEJ1ZmZlcihwYXN0
ZWJvYXJkVHlwZS51dGY4KCkuZGF0YSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9
CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIFdlYlNlbGVjdGlvbkRhdGEmJiBzZWxlY3Rpb24pCit7CisgICAg
Q2xpcGJvYXJkOjpnZXQocGFzdGVib2FyZE5hbWUpLndyaXRlKFdURk1vdmUoc2VsZWN0aW9uLnNl
bGVjdGlvbkRhdGEpKTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmNsZWFyQ2xpcGJv
YXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7CisgICAgQ2xpcGJvYXJkOjpnZXQo
cGFzdGVib2FyZE5hbWUpLmNsZWFyKCk7CiB9CiAKIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpz
ZXRQcmltYXJ5U2VsZWN0aW9uT3duZXIoV2ViRnJhbWVQcm94eSogZnJhbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDIxZjk4N2RjY2FlYi4uNmRiYzNmY2I5MjFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtMjkzLDE3ICsyOTMsNDkgQEAg
dm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVy
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYKICNpZiBQTEFURk9STShHVEspCiAvLyBQYXN0ZWJvYXJk
U3RyYXRlZ3kKIAorVmVjdG9yPFN0cmluZz4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp0eXBlcyhj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3Vs
dDsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRUeXBlcyhwYXN0ZWJv
YXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFR5cGVzOjpSZXBseShy
ZXN1bHQpLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpyZWFkVGV4dEZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OlJlYWRUZXh0KHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9h
cmRQcm94eTo6UmVhZFRleHQ6OlJlcGx5KHJlc3VsdCksIDApOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZEZpbGVQYXRo
c0Zyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBWZWN0
b3I8U3RyaW5nPiByZXN1bHQ7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
UmVhZEZpbGVQYXRocyhwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OlJlYWRGaWxlUGF0aHM6OlJlcGx5KHJlc3VsdCksIDApOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZEJ1
ZmZlckZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkVHlwZSkKK3sKKworICAgIElQQzo6U2hhcmVkQnVmZmVyRGF0YVJlZmVy
ZW5jZSBkYXRhOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRCdWZm
ZXIocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9h
cmRQcm94eTo6UmVhZEJ1ZmZlcjo6UmVwbHkoZGF0YSksIDApOworICAgIHJldHVybiBkYXRhLmJ1
ZmZlcigpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb0NsaXBib2Fy
ZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBTZWxlY3Rpb25EYXRhJiYgc2VsZWN0aW9u
RGF0YSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OldyaXRlVG9DbGlwYm9h
cmQocGFzdGVib2FyZE5hbWUsIFdlYlNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSkpLCAwKTsK
K30KKwogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9DbGlwYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU2VsZWN0aW9uRGF0YSYgc2VsZWN0aW9uKQog
ewogICAgIFdlYlNlbGVjdGlvbkRhdGEgc2VsZWN0aW9uRGF0YShzZWxlY3Rpb24pOwogICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6V3JpdGVUb0NsaXBib2FyZChwYXN0ZWJvYXJkTmFt
ZSwgc2VsZWN0aW9uRGF0YSksIDApOwogfQogCi1SZWY8U2VsZWN0aW9uRGF0YT4gV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjpyZWFkRnJvbUNsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKQordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNsZWFyQ2xpcGJvYXJkKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgV2ViU2VsZWN0aW9uRGF0YSBzZWxlY3Rpb247
Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZEZyb21DbGlwYm9hcmQo
cGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkRnJvbUNs
aXBib2FyZDo6UmVwbHkoc2VsZWN0aW9uKSwgMCk7Ci0gICAgcmV0dXJuIFdURk1vdmUoc2VsZWN0
aW9uLnNlbGVjdGlvbkRhdGEpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6Q2xl
YXJDbGlwYm9hcmQocGFzdGVib2FyZE5hbWUpLCAwKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JN
KEdUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAppbmRleCAzNWIzZjFmOGFhNTkuLjY1
ZTEzYzNjYjFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaApAQCAtNzUsOCArNzUs
MTMgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgdXJsU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oR1RLKQorICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOworICAgIFN0cmluZyByZWFkVGV4dEZyb21D
bGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CisgICAgVmVj
dG9yPFN0cmluZz4gcmVhZEZpbGVQYXRoc0Zyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZl
ckZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCB3cml0ZVRvQ2xpcGJvYXJkKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkRhdGEm
KSBvdmVycmlkZTsKLSAgICBSZWY8V2ViQ29yZTo6U2VsZWN0aW9uRGF0YT4gcmVhZEZyb21DbGlw
Ym9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB3
cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFdlYkNvcmU6OlNl
bGVjdGlvbkRhdGEmJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhckNsaXBib2FyZChjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKICNlbmRpZgogI2lmIFVTRShMSUJXUEUp
CiAgICAgdm9pZCBnZXRUeXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMpIG92ZXJyaWRlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399013</attachid>
            <date>2020-05-11 05:50:48 -0700</date>
            <delta_ts>2020-05-12 07:16:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk-clipboard.diff</filename>
            <type>text/plain</type>
            <size>70004</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYTAwYTllNDdkNjAuLmVmNGRiYjg5NjRlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDUwIEBACisyMDIwLTA1LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZXdvcmsgY2xpcGJvYXJkIGhhbmRsaW5nIGlu
IHByZXBhcmF0aW9uIGZvciBHVEs0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTE1MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW1vdmUgUGxhdGZvcm1QYXN0ZWJvYXJkIGltcGxlbWVudGF0aW9uIHRo
YXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgQ2xpcGJvYXJkIGNsYXNzIGluIHRoZSBXZWJLaXQKKyAg
ICAgICAgbGF5ZXIuIFdoZW4gUGFzdGVib2FyZCBjbGFzcyBpcyBjcmVhdGVkIGZvciBjb3B5IGFu
ZCBwYXN0ZSBvcGVyYXRpb25zLCBpdCBubyBsb25nZXIgaGFzIGEgU2VsZWN0aW9uRGF0YSBtZW1i
ZXIsCisgICAgICAgIGl0IGp1c3QgdXNlcyB0aGUgbmV3IG1ldGhvZHMgaW4gdGhlIHBhc3RlYm9h
cmQgc3RyYXRlZ3kgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2xpcGJvYXJkLiBXZWJDb250ZW50
UmVhZGVyIGhhcworICAgICAgICBub3cgYW4gaW1wbGVtZW50YXRpb24gZm9yIEdUSyBhbmQgaXQn
cyB1c2VkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBjbGlwYm9hcmQsIHRoZSBzYW1lIHdheSBpdCdz
IGRvbmUgaW4gb3RoZXIgcG9ydHMuCisKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAg
ICAgKiBlZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIuaDoKKyAgICAgICAgKiBlZGl0aW5nL2d0ay9F
ZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJv
YXJkKTogVXNlIHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCgpLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQpOiBVc2UgV2ViQ29udGVudFJlYWRlci4K
KyAgICAgICAgKiBlZGl0aW5nL2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZEZpbGVQYXRocyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJDb250ZW50UmVhZGVyOjpyZWFkUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNv
bnRlbnRSZWFkZXI6OnJlYWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVh
ZGVyOjpyZWFkVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJrdXBSZWFkZXI6
OnJlYWRIVE1MKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudFJlYWRlcjo6cmVhZERhdGFCdWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OlBh
c3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6c2VsZWN0aW9uRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVz
Rm9yTGVnYWN5VW5zYWZlQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
cmVhZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpmaWxlQ29udGVudFN0
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJkR3RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvU2VsZWN0aW9uRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25E
YXRhOjpzZXRVUkwpOiBEbyBub3Qgb3ZlcnJpZGUgdGhlIHRleHQgYW5kIG1hcmt1cCBpZiBpdCBo
YXMgYWxyZWFkeSBiZWVuIHNldC4KKwogMjAyMC0wNS0wNyAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYXlCZWdpbiB3aGVlbCBldmVudCBpbiBhIDxz
ZWxlY3Q+IGRvZXNuJ3QgZmxhc2ggdGhlIHNjcm9sbGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRl
eCAzZDc1YmQ1MjBjZTguLmE3NjA5Mjc3MGYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
U291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKQEAgLTQy
LDYgKzQyLDcgQEAgYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCiBl
ZGl0aW5nL2F0ay9GcmFtZVNlbGVjdGlvbkF0ay5jcHAKIAogZWRpdGluZy9ndGsvRWRpdG9yR3Rr
LmNwcAorZWRpdGluZy9ndGsvV2ViQ29udGVudFJlYWRlckd0ay5jcHAKIAogbG9hZGVyL3NvdXAv
UmVzb3VyY2VMb2FkZXJTb3VwLmNwcAogCkBAIC0xMTAsNyArMTExLDYgQEAgcGxhdGZvcm0vZ3Rr
L0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAK
IHBsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAogcGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
S2V5Ym9hcmRFdmVudEd0ay5jcHAKLXBsYXRmb3JtL2d0ay9QbGF0Zm9ybVBhc3RlYm9hcmRHdGsu
Y3BwCiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGxh
dGZvcm1XaGVlbEV2ZW50R3RrLmNwcAogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIuaAppbmRleCA1NDU0MWYw
YTcyYmIuLjA4YWExMjQyNjYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9X
ZWJDb250ZW50UmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50
UmVhZGVyLmgKQEAgLTY4LDE4ICs2OCwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRGcmFnbWVu
dChSZWY8RG9jdW1lbnRGcmFnbWVudD4mJik7CiAKIHByaXZhdGU6Ci0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgYm9vbCByZWFkV2ViQXJjaGl2ZShTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKKyNp
ZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGJvb2wgcmVhZEZpbGVQYXRo
KGNvbnN0IFN0cmluZyYsIFByZXNlbnRhdGlvblNpemUgcHJlZmVycmVkUHJlc2VudGF0aW9uU2l6
ZSA9IHsgfSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSA9IHsgfSkgb3ZlcnJpZGU7CiAgICAg
Ym9vbCByZWFkRmlsZVBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jikgb3ZlcnJpZGU7CiAgICAg
Ym9vbCByZWFkSFRNTChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBib29sIHJlYWRSVEZE
KFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOwotICAgIGJvb2wgcmVhZFJURihTaGFyZWRCdWZmZXIm
KSBvdmVycmlkZTsKICAgICBib29sIHJlYWRJbWFnZShSZWY8U2hhcmVkQnVmZmVyPiYmLCBjb25z
dCBTdHJpbmcmIHR5cGUsIFByZXNlbnRhdGlvblNpemUgcHJlZmVycmVkUHJlc2VudGF0aW9uU2l6
ZSA9IHsgfSkgb3ZlcnJpZGU7CiAgICAgYm9vbCByZWFkVVJMKGNvbnN0IFVSTCYsIGNvbnN0IFN0
cmluZyYgdGl0bGUpIG92ZXJyaWRlOwotICAgIGJvb2wgcmVhZERhdGFCdWZmZXIoU2hhcmVkQnVm
ZmVyJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFByZXNlbnRhdGlv
blNpemUgcHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkgb3ZlcnJpZGU7CiAgICAgYm9v
bCByZWFkUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwogI2VuZGlmCisKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyAgICBib29sIHJlYWRXZWJBcmNoaXZlKFNoYXJlZEJ1ZmZlciYpIG92
ZXJyaWRlOworICAgIGJvb2wgcmVhZFJURkQoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CisgICAg
Ym9vbCByZWFkUlRGKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcmVhZERhdGFC
dWZmZXIoU2hhcmVkQnVmZmVyJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUsIFByZXNlbnRhdGlvblNpemUgcHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkgb3Zl
cnJpZGU7CisjZW5kaWYKIH07CiAKIGNsYXNzIFdlYkNvbnRlbnRNYXJrdXBSZWFkZXIgZmluYWwg
OiBwdWJsaWMgRnJhbWVXZWJDb250ZW50UmVhZGVyIHsKQEAgLTkyLDE4ICs5NSwyMSBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgcmVh
ZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CisjaWYgUExBVEZPUk0oQ09DT0Ep
IHx8IFBMQVRGT1JNKEdUSykKICAgICBib29sIHJlYWRGaWxlUGF0aChjb25zdCBTdHJpbmcmLCBQ
cmVzZW50YXRpb25TaXplID0geyB9LCBjb25zdCBTdHJpbmcmID0geyB9KSBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIGJvb2wgcmVhZEZpbGVQYXRocyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCByZWFkSFRNTChjb25zdCBT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICBib29sIHJlYWRSVEZEKFNoYXJlZEJ1ZmZlciYpIG92ZXJy
aWRlOwotICAgIGJvb2wgcmVhZFJURihTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKICAgICBib29s
IHJlYWRJbWFnZShSZWY8U2hhcmVkQnVmZmVyPiYmLCBjb25zdCBTdHJpbmcmLCBQcmVzZW50YXRp
b25TaXplID0geyB9KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgcmVhZFVS
TChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIGJvb2wgcmVhZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBib29sIHJlYWRQbGFpblRleHQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KICNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgYm9vbCBy
ZWFkV2ViQXJjaGl2ZShTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKKyAgICBib29sIHJlYWRSVEZE
KFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcmVhZFJURihTaGFyZWRCdWZmZXIm
KSBvdmVycmlkZTsKKyAgICBib29sIHJlYWREYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFByZXNlbnRhdGlvblNpemUgPSB7IH0pIG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKIH07CiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYg
ZGVmaW5lZChfX09CSkNfXykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3Rr
L0VkaXRvckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3Bw
CmluZGV4IGQ0MWU0YjkzMDI3Ni4uYmVmOWZmNjAwNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvZ3RrL0VkaXRvckd0ay5jcHAKQEAgLTI3LDkgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJFZGl0b3IuaCIKIAotI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJD
YWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkRPTVVSTC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJh
Z21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxFbWJlZEVsZW1lbnQu
aCIKQEAgLTQ0LDQ5ICs0MiwxMiBAQAogI2luY2x1ZGUgIlNWR0ltYWdlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNlbGVjdGlvbkRhdGEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUg
IldlYkNvbnRlbnRSZWFkZXIuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSAi
bWFya3VwLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9h
cmREYXRhKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlLCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkK
LXsKLSAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwotCi0gICAgaWYgKCFwYXN0ZWJvYXJkLmhh
c0RhdGEoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBjb25zdCBhdXRvJiBzZWxl
Y3Rpb24gPSBwYXN0ZWJvYXJkLnNlbGVjdGlvbkRhdGEoKTsKLSAgICBpZiAoc2VsZWN0aW9uLmhh
c0ltYWdlKCkpIHsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgYXV0
byBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oc2VsZWN0aW9uLmlt
YWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksIFtdKHZvaWQqIG91dHB1dCwgY29uc3QgdW5zaWdu
ZWQgY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSkgewotICAgICAgICAgICAgaWYgKCFyZWludGVy
cHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRyeUFwcGVuZChkYXRhLCBzaXpl
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9SOwotICAg
ICAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOwotICAgICAgICB9LCAmYnVmZmVy
KTsKLSAgICAgICAgaWYgKHN0YXR1cyA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUykgewotICAgICAg
ICAgICAgYXV0byBibG9iID0gQmxvYjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSwgImltYWdlL3Bu
ZyIpOwotICAgICAgICAgICAgaWYgKCFmcmFtZS5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50Rm9ySW1h
Z2VBbmRVUkwoKmZyYW1lLmRvY3VtZW50KCksIERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKCpmcmFt
ZS5kb2N1bWVudCgpLCBibG9iKSwgeyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChz
ZWxlY3Rpb24uaGFzTWFya3VwKCkgJiYgZnJhbWUuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgc2VsZWN0aW9uLm1h
cmt1cCgpLCBlbXB0eVN0cmluZygpLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQp
OwotCi0gICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAoc2VsZWN0aW9uLmhhc1RleHQoKSkgewotICAgICAgICBjaG9zZVBsYWluVGV4dCA9
IHRydWU7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSksIHNlbGVjdGlvbi50ZXh0KCkpOwotICAgIH0KLQotICAgIHJldHVybiBudWxs
cHRyOwotfQotCiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBw
YXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+IG9wdGlvbnMpCiB7CiAgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKQEAgLTk0LDcgKzU1LDcgQEAgdm9pZCBF
ZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9u
U2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNob3NlUGxhaW5U
ZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbVBhc3RlYm9hcmREYXRhKCpwYXN0ZWJvYXJkLCAqbV9kb2N1bWVudC5mcmFtZSgpLCAq
cmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93UGxhaW5UZXh0KSwgY2hv
c2VQbGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHdl
YkNvbnRlbnRGcm9tUGFzdGVib2FyZCgqcGFzdGVib2FyZCwgKnJhbmdlLCBvcHRpb25zLmNvbnRh
aW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsKIAogICAg
IGlmIChmcmFnbWVudCAmJiBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBc1F1b3RhdGlv
bikpCiAgICAgICAgIHF1b3RlRnJhZ21lbnRGb3JQYXN0aW5nKCpmcmFnbWVudCk7CkBAIC0xNTQs
NyArMTE1LDEwIEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0
ZWJvYXJkJiBwYXN0ZWJvYXJkKQogCiBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3
ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgY29uc3QgU2lt
cGxlUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5U
ZXh0KQogewotICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShwYXN0
ZWJvYXJkLCAqbV9kb2N1bWVudC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCwgY2hv
c2VQbGFpblRleHQpOworICAgIFdlYkNvbnRlbnRSZWFkZXIgcmVhZGVyKCptX2RvY3VtZW50LmZy
YW1lKCksIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0KTsKKyAgICBwYXN0ZWJvYXJkLnJlYWQocmVh
ZGVyKTsKKyAgICBjaG9zZVBsYWluVGV4dCA9IHJlYWRlci5tYWRlRnJhZ21lbnRGcm9tUGxhaW5U
ZXh0OworICAgIHJldHVybiBXVEZNb3ZlKHJlYWRlci5mcmFnbWVudCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dl
YkNvbnRlbnRSZWFkZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvV2ViQ29u
dGVudFJlYWRlckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li43N2QzNGJkZTJlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2d0ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29udGVu
dFJlYWRlci5oIgorCisjaW5jbHVkZSAiQmxvYlVSTC5oIgorI2luY2x1ZGUgIkRPTVVSTC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2lu
Y2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8d3Rm
L1VSTC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgV2ViQ29udGVudFJlYWRlcjo6
cmVhZEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgUHJlc2VudGF0aW9uU2l6ZSwgY29uc3Qg
U3RyaW5nJikKK3sKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgIWZyYW1lLmRvY3VtZW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gbWFya3VwID0gdXJsVG9NYXJrdXAo
VVJMKHsgfSwgcGF0aCksIHBhdGgpOworICAgIGFkZEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50RnJv
bU1hcmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgbWFya3VwLCAiZmlsZTovLyIsIERpc2FsbG93U2Ny
aXB0aW5nQW5kUGx1Z2luQ29udGVudCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViQ29udGVudFJlYWRlcjo6cmVhZEZpbGVQYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0
aHMpCit7CisgICAgaWYgKHBhdGhzLmlzRW1wdHkoKSB8fCAhZnJhbWUuZG9jdW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpCisgICAg
ICAgIHJlYWRGaWxlUGF0aChwYXRoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdl
YkNvbnRlbnRSZWFkZXI6OnJlYWRIVE1MKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGlm
IChmcmFtZS5zZXR0aW5ncygpLnByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKCkgfHwgIWZyYW1lLmRv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGFkZEZyYWdtZW50KGNyZWF0
ZUZyYWdtZW50RnJvbU1hcmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgc3RyaW5nLCBlbXB0eVN0cmlu
ZygpLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkUGxhaW5UZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCkKK3sKKyAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVS
YW5nZShjb250ZXh0KSwgdGV4dCkpOworCisgICAgbWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dCA9
IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVh
ZEltYWdlKFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBy
ZXNlbnRhdGlvblNpemUgcHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZSkKK3sKKyAgICBBU1NFUlQo
ZnJhbWUuZG9jdW1lbnQoKSk7CisgICAgYXV0byYgZG9jdW1lbnQgPSAqZnJhbWUuZG9jdW1lbnQo
KTsKKyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZvckltYWdlQW5kVVJMKGRvY3VtZW50
LCBET01VUkw6OmNyZWF0ZU9iamVjdFVSTChkb2N1bWVudCwgQmxvYjo6Y3JlYXRlKGJ1ZmZlci5n
ZXQoKSwgdHlwZSkpLCBwcmVmZXJyZWRQcmVzZW50YXRpb25TaXplKSk7CisKKyAgICByZXR1cm4g
ZnJhZ21lbnQ7Cit9CisKK2Jvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZFVSTChjb25zdCBVUkwm
LCBjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJDb250
ZW50TWFya3VwUmVhZGVyOjpyZWFkSFRNTChjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFz
dGVib2FyZC5oCmluZGV4IDFiOGVhMDZjYmRjNy4uMDFkYjU5OTU1MjBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGFzdGVib2FyZC5oCkBAIC0xMzYsMTggKzEzNiwyMSBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIH5QYXN0ZWJvYXJkV2ViQ29udGVudFJlYWRlcigpID0gZGVmYXVsdDsKIAotI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIHZpcnR1YWwgYm9vbCByZWFkV2ViQXJjaGl2ZShTaGFyZWRC
dWZmZXImKSA9IDA7CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICB2
aXJ0dWFsIGJvb2wgcmVhZEZpbGVQYXRoKGNvbnN0IFN0cmluZyYsIFByZXNlbnRhdGlvblNpemUg
cHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlw
ZSA9IHsgfSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWFkRmlsZVBhdGhzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWFkSFRNTChjb25zdCBTdHJpbmcm
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHJlYWRSVEZEKFNoYXJlZEJ1ZmZlciYpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcmVhZFJURihTaGFyZWRCdWZmZXImKSA9IDA7CiAgICAgdmlydHVhbCBi
b29sIHJlYWRJbWFnZShSZWY8U2hhcmVkQnVmZmVyPiYmLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBy
ZXNlbnRhdGlvblNpemUgcHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCByZWFkVVJMKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgcmVhZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiwgY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFByZXNlbnRhdGlvblNpemUgcHJlZmVy
cmVkUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWFkUGxh
aW5UZXh0KGNvbnN0IFN0cmluZyYpID0gMDsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgdmlydHVhbCBib29sIHJlYWRXZWJBcmNoaXZlKFNoYXJlZEJ1ZmZlciYpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcmVhZFJURkQoU2hhcmVkQnVmZmVyJikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCByZWFkUlRGKFNoYXJlZEJ1ZmZlciYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZERh
dGFCdWZmZXIoU2hhcmVkQnVmZmVyJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IG5hbWUsIFByZXNlbnRhdGlvblNpemUgcHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkg
PSAwOworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgUGFzdGVib2FyZFBsYWluVGV4dCB7CkBAIC0zMTMs
OSArMzE2LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQotICAgIHZv
aWQgd3JpdGVUb0NsaXBib2FyZCgpOwotICAgIHZvaWQgcmVhZEZyb21DbGlwYm9hcmQoKTsKLSAg
ICBSZWY8U2VsZWN0aW9uRGF0YT4gbV9zZWxlY3Rpb25EYXRhOworICAgIFJlZlB0cjxTZWxlY3Rp
b25EYXRhPiBtX3NlbGVjdGlvbkRhdGE7CiAgICAgU3RyaW5nIG1fbmFtZTsKICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCmluZGV4IGI2M2Uz
NWQwOTgxYS4uNWQ5MTY0ZjE0MDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0
ZWJvYXJkU3RyYXRlZ3kuaApAQCAtODEsOCArODEsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBjb250YWluc1N0cmluZ1NhZmVGb3JET01Ub1JlYWRGb3JUeXBlKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKIAogI2lmIFBMQVRGT1JNKEdUSykK
KyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyByZWFkVGV4dEZyb21DbGlwYm9hcmQoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmlu
Zz4gcmVhZEZpbGVQYXRoc0Zyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZlckZyb21D
bGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSk7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlVG9DbGlwYm9hcmQoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgU2VsZWN0aW9uRGF0YSYmKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHdyaXRlVG9DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3Qg
U2VsZWN0aW9uRGF0YSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZjxTZWxlY3Rpb25EYXRhPiByZWFk
RnJvbUNsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNsZWFyQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0g
MDsKICNlbmRpZiAvLyBQTEFURk9STShHVEspCiAKICNpZiBVU0UoTElCV1BFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCmluZGV4IDIwNjc4MjA3NWRm
Yy4uYzIwNWNiMThhZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UGFzdGVib2FyZEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3Rl
Ym9hcmRHdGsuY3BwCkBAIC0yMywxMCArMjMsMTIgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgIkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXN0
ZWJvYXJkU3RyYXRlZ3kuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNs
dWRlICJTZWxlY3Rpb25EYXRhLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL1VSTC5oPgpAQCAtNjYsMjYgKzY4LDIyIEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXN0
ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChjb25zdCBEcmFnRGF0YSYg
ZHJhCiAjZW5kaWYKIAogUGFzdGVib2FyZDo6UGFzdGVib2FyZChTZWxlY3Rpb25EYXRhJiBzZWxl
Y3Rpb25EYXRhKQotICAgIDogbV9zZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEpCisgICAgOiBt
X3NlbGVjdGlvbkRhdGEoJnNlbGVjdGlvbkRhdGEpCiB7CiB9CiAKIFBhc3RlYm9hcmQ6OlBhc3Rl
Ym9hcmQoY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogbV9zZWxlY3Rpb25EYXRhKFNlbGVjdGlv
bkRhdGE6OmNyZWF0ZSgpKQotICAgICwgbV9uYW1lKG5hbWUpCi17Ci19Ci0KLVBhc3RlYm9hcmQ6
OlBhc3RlYm9hcmQoKQotICAgIDogbV9zZWxlY3Rpb25EYXRhKFNlbGVjdGlvbkRhdGE6OmNyZWF0
ZSgpKQorICAgIDogbV9uYW1lKG5hbWUpCiB7CiB9CiAKK1Bhc3RlYm9hcmQ6OlBhc3RlYm9hcmQo
KSA9IGRlZmF1bHQ7CiBQYXN0ZWJvYXJkOjp+UGFzdGVib2FyZCgpID0gZGVmYXVsdDsKIAogY29u
c3QgU2VsZWN0aW9uRGF0YSYgUGFzdGVib2FyZDo6c2VsZWN0aW9uRGF0YSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0YS5nZXQoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3Nl
bGVjdGlvbkRhdGEpOworICAgIHJldHVybiAqbV9zZWxlY3Rpb25EYXRhLmdldCgpOwogfQogCiBz
dGF0aWMgQ2xpcGJvYXJkRGF0YVR5cGUgc2VsZWN0aW9uRGF0YVR5cGVGcm9tSFRNTENsaXBib2Fy
ZFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtMTAzLDIzICsxMDEsOSBAQCBzdGF0aWMgQ2xp
cGJvYXJkRGF0YVR5cGUgc2VsZWN0aW9uRGF0YVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoY29u
c3QgU3RyaW5nJiB0eQogICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVVua25vd247CiB9CiAK
LXZvaWQgUGFzdGVib2FyZDo6d3JpdGVUb0NsaXBib2FyZCgpCi17Ci0gICAgaWYgKG1fbmFtZS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBh
c3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFtZSwgbV9zZWxlY3Rpb25E
YXRhKTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjpyZWFkRnJvbUNsaXBib2FyZCgpCi17Ci0gICAg
aWYgKG1fbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2VsZWN0aW9uRGF0
YSA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZEZyb21D
bGlwYm9hcmQobV9uYW1lKTsKLX0KLQogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyhjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKKyAgICBBU1NFUlQobV9zZWxl
Y3Rpb25EYXRhKTsKICAgICBzd2l0Y2ggKHNlbGVjdGlvbkRhdGFUeXBlRnJvbUhUTUxDbGlwYm9h
cmRUeXBlKHR5cGUpKSB7CiAgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6CiAgICAg
Y2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKQEAgLTEzNywyNiArMTIxLDMzIEBAIHZvaWQgUGFz
dGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRh
dGEpCiAgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUltYWdlOgogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgd3JpdGVUb0NsaXBib2FyZCgpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRl
UGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVw
bGFjZU9wdGlvbikKIHsKLSAgICBtX3NlbGVjdGlvbkRhdGEtPmNsZWFyQWxsKCk7Ci0gICAgbV9z
ZWxlY3Rpb25EYXRhLT5zZXRUZXh0KHRleHQpOwotICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0Q2Fu
U21hcnRSZXBsYWNlKHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2UpOwotCi0g
ICAgd3JpdGVUb0NsaXBib2FyZCgpOworICAgIGlmIChtX3NlbGVjdGlvbkRhdGEpIHsKKyAgICAg
ICAgbV9zZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOworICAgICAgICBtX3NlbGVjdGlvbkRhdGEt
PnNldFRleHQodGV4dCk7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0Q2FuU21hcnRSZXBs
YWNlKHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2UpOworICAgIH0gZWxzZSB7
CisgICAgICAgIFNlbGVjdGlvbkRhdGEgZGF0YTsKKyAgICAgICAgZGF0YS5zZXRUZXh0KHRleHQp
OworICAgICAgICBkYXRhLnNldENhblNtYXJ0UmVwbGFjZShzbWFydFJlcGxhY2VPcHRpb24gPT0g
Q2FuU21hcnRSZXBsYWNlKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFtZSwgV1RGTW92ZShkYXRhKSk7Cisg
ICAgfQogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRVUkwmIHBh
c3RlYm9hcmRVUkwpCiB7CiAgICAgQVNTRVJUKCFwYXN0ZWJvYXJkVVJMLnVybC5pc0VtcHR5KCkp
OwotCi0gICAgbV9zZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOwotICAgIG1fc2VsZWN0aW9uRGF0
YS0+c2V0VVJMKHBhc3RlYm9hcmRVUkwudXJsLCBwYXN0ZWJvYXJkVVJMLnRpdGxlKTsKLQotICAg
IHdyaXRlVG9DbGlwYm9hcmQoKTsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAg
IG1fc2VsZWN0aW9uRGF0YS0+Y2xlYXJBbGwoKTsKKyAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5z
ZXRVUkwocGFzdGVib2FyZFVSTC51cmwsIHBhc3RlYm9hcmRVUkwudGl0bGUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIFNlbGVjdGlvbkRhdGEgZGF0YTsKKyAgICAgICAgZGF0YS5zZXRVUkwocGFz
dGVib2FyZFVSTC51cmwsIHBhc3RlYm9hcmRVUkwudGl0bGUpOworICAgICAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9DbGlwYm9hcmQobV9uYW1l
LCBXVEZNb3ZlKGRhdGEpKTsKKyAgICB9CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVUcnVz
dHdvcnRoeVdlYlVSTHNQYm9hcmRUeXBlKGNvbnN0IFBhc3RlYm9hcmRVUkwmKQpAQCAtMTY2LDM4
ICsxNTcsNTcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVRydXN0d29ydGh5V2ViVVJMc1Bib2Fy
ZFR5cGUoY29uc3QgUGFzdGVib2FyZFVSTCYpCiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGUoY29u
c3QgUGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpCiB7Ci0gICAgbV9zZWxlY3Rpb25E
YXRhLT5jbGVhckFsbCgpOwotICAgIGlmICghcGFzdGVib2FyZEltYWdlLnVybC51cmwuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0VVJMKHBhc3RlYm9hcmRJbWFnZS51
cmwudXJsLCBwYXN0ZWJvYXJkSW1hZ2UudXJsLnRpdGxlKTsKLSAgICAgICAgbV9zZWxlY3Rpb25E
YXRhLT5zZXRNYXJrdXAocGFzdGVib2FyZEltYWdlLnVybC5tYXJrdXApOworICAgIGlmIChtX3Nl
bGVjdGlvbkRhdGEpIHsKKyAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOworICAg
ICAgICBpZiAoIXBhc3RlYm9hcmRJbWFnZS51cmwudXJsLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRVUkwocGFzdGVib2FyZEltYWdlLnVybC51cmwsIHBhc3Rl
Ym9hcmRJbWFnZS51cmwudGl0bGUpOworICAgICAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRN
YXJrdXAocGFzdGVib2FyZEltYWdlLnVybC5tYXJrdXApOworICAgICAgICB9CisgICAgICAgIG1f
c2VsZWN0aW9uRGF0YS0+c2V0SW1hZ2UocGFzdGVib2FyZEltYWdlLmltYWdlLmdldCgpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBTZWxlY3Rpb25EYXRhIGRhdGE7CisgICAgICAgIGlmICghcGFz
dGVib2FyZEltYWdlLnVybC51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBkYXRhLnNldFVS
TChwYXN0ZWJvYXJkSW1hZ2UudXJsLnVybCwgcGFzdGVib2FyZEltYWdlLnVybC50aXRsZSk7Cisg
ICAgICAgICAgICBkYXRhLnNldE1hcmt1cChwYXN0ZWJvYXJkSW1hZ2UudXJsLm1hcmt1cCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZGF0YS5zZXRJbWFnZShwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UuZ2V0
KCkpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PndyaXRlVG9DbGlwYm9hcmQobV9uYW1lLCBXVEZNb3ZlKGRhdGEpKTsKICAgICB9Ci0gICAgbV9z
ZWxlY3Rpb25EYXRhLT5zZXRJbWFnZShwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UuZ2V0KCkpOwotCi0g
ICAgd3JpdGVUb0NsaXBib2FyZCgpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0
IFBhc3RlYm9hcmRXZWJDb250ZW50JiBwYXN0ZWJvYXJkQ29udGVudCkKIHsKLSAgICBtX3NlbGVj
dGlvbkRhdGEtPmNsZWFyQWxsKCk7Ci0gICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRUZXh0KHBhc3Rl
Ym9hcmRDb250ZW50LnRleHQpOwotICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0TWFya3VwKHBhc3Rl
Ym9hcmRDb250ZW50Lm1hcmt1cCk7Ci0gICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRDYW5TbWFydFJl
cGxhY2UocGFzdGVib2FyZENvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUpOwotCi0gICAgd3Jp
dGVUb0NsaXBib2FyZCgpOworICAgIGlmIChtX3NlbGVjdGlvbkRhdGEpIHsKKyAgICAgICAgbV9z
ZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOworICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldFRl
eHQocGFzdGVib2FyZENvbnRlbnQudGV4dCk7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0
TWFya3VwKHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCk7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0
YS0+c2V0Q2FuU21hcnRSZXBsYWNlKHBhc3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVs
ZXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTZWxlY3Rpb25EYXRhIGRhdGE7CisgICAgICAg
IGRhdGEuc2V0VGV4dChwYXN0ZWJvYXJkQ29udGVudC50ZXh0KTsKKyAgICAgICAgZGF0YS5zZXRN
YXJrdXAocGFzdGVib2FyZENvbnRlbnQubWFya3VwKTsKKyAgICAgICAgZGF0YS5zZXRDYW5TbWFy
dFJlcGxhY2UocGFzdGVib2FyZENvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUpOworICAgICAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9DbGlw
Ym9hcmQobV9uYW1lLCBXVEZNb3ZlKGRhdGEpKTsKKyAgICB9CiB9CiAKIHZvaWQgUGFzdGVib2Fy
ZDo6Y2xlYXIoKQogeworICAgIGlmICghbV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2xlYXJDbGlwYm9hcmQobV9u
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIFdlIGRvIG5vdCBjbGVhciBm
aWxlbmFtZXMuIEFjY29yZGluZyB0byB0aGUgc3BlYzogIlRoZSBjbGVhckRhdGEoKSBtZXRob2QK
ICAgICAvLyBkb2VzIG5vdCBhZmZlY3Qgd2hldGhlciBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBp
biB0aGUgZHJhZywgc28gdGhlIHR5cGVzCiAgICAgLy8gYXR0cmlidXRlJ3MgbGlzdCBtaWdodCBz
dGlsbCBub3QgYmUgZW1wdHkgYWZ0ZXIgY2FsbGluZyBjbGVhckRhdGEoKSAoaXQgd291bGQKICAg
ICAvLyBzdGlsbCBjb250YWluIHRoZSAiRmlsZXMiIHN0cmluZyBpZiBhbnkgZmlsZXMgd2VyZSBp
bmNsdWRlZCBpbiB0aGUgZHJhZykuIgogICAgIG1fc2VsZWN0aW9uRGF0YS0+Y2xlYXJBbGxFeGNl
cHRGaWxlbmFtZXMoKTsKLSAgICB3cml0ZVRvQ2xpcGJvYXJkKCk7CiB9CiAKIHZvaWQgUGFzdGVi
b2FyZDo6Y2xlYXIoY29uc3QgU3RyaW5nJiB0eXBlKQogeworICAgIEFTU0VSVChtX3NlbGVjdGlv
bkRhdGEpOwogICAgIHN3aXRjaCAoc2VsZWN0aW9uRGF0YVR5cGVGcm9tSFRNTENsaXBib2FyZFR5
cGUodHlwZSkpIHsKICAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDoKICAgICBjYXNl
IENsaXBib2FyZERhdGFUeXBlVVJMOgpAQCAtMjE2LDE0ICsyMjYsMTMgQEAgdm9pZCBQYXN0ZWJv
YXJkOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+
Y2xlYXJBbGwoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgd3JpdGVUb0NsaXBib2Fy
ZCgpOwogfQogCiBib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCiB7Ci0gICAgcmVh
ZEZyb21DbGlwYm9hcmQoKTsKLSAgICByZXR1cm4gbV9zZWxlY3Rpb25EYXRhLT5jYW5TbWFydFJl
cGxhY2UoKTsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKQorICAgICAgICByZXR1cm4gbV9zZWxl
Y3Rpb25EYXRhLT5jYW5TbWFydFJlcGxhY2UoKTsKKyAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBlcyhtX25hbWUpLmNvbnRhaW5zKCJhcHBs
aWNhdGlvbi92bmQud2Via2l0Z3RrLnNtYXJ0cGFzdGUiX3MpOwogfQogCiAjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkKQEAgLTIzNCwyNSArMjQzLDcxIEBAIHZvaWQgUGFzdGVib2FyZDo6c2V0RHJh
Z0ltYWdlKERyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmKQogCiB2b2lkIFBhc3RlYm9hcmQ6OnJl
YWQoUGFzdGVib2FyZFBsYWluVGV4dCYgdGV4dCwgUGxhaW5UZXh0VVJMUmVhZGluZ1BvbGljeSwg
T3B0aW9uYWw8c2l6ZV90PikKIHsKLSAgICByZWFkRnJvbUNsaXBib2FyZCgpOwotICAgIHRleHQu
dGV4dCA9IG1fc2VsZWN0aW9uRGF0YS0+dGV4dCgpOworICAgIHRleHQudGV4dCA9IHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZFRleHRGcm9tQ2xpcGJvYXJk
KG1fbmFtZSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkV2ViQ29udGVu
dFJlYWRlciYsIFdlYkNvbnRlbnRSZWFkaW5nUG9saWN5LCBPcHRpb25hbDxzaXplX3Q+KQordm9p
ZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRXZWJDb250ZW50UmVhZGVyJiByZWFkZXIsIFdl
YkNvbnRlbnRSZWFkaW5nUG9saWN5IHBvbGljeSwgT3B0aW9uYWw8c2l6ZV90PikKIHsKKyAgICBp
ZiAobV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIGlmIChtX3NlbGVjdGlvbkRhdGEtPmhhc01h
cmt1cCgpICYmIHJlYWRlci5yZWFkSFRNTChtX3NlbGVjdGlvbkRhdGEtPm1hcmt1cCgpKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocG9saWN5ID09IFdlYkNvbnRlbnRSZWFk
aW5nUG9saWN5OjpPbmx5UmljaFRleHRUeXBlcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAobV9zZWxlY3Rpb25EYXRhLT5oYXNGaWxlbmFtZXMoKSAmJiByZWFkZXIucmVhZEZp
bGVQYXRocyhtX3NlbGVjdGlvbkRhdGEtPmZpbGVuYW1lcygpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAobV9zZWxlY3Rpb25EYXRhLT5oYXNUZXh0KCkgJiYgcmVhZGVyLnJl
YWRQbGFpblRleHQobV9zZWxlY3Rpb25EYXRhLT50ZXh0KCkpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHR5cGVzID0gcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBlcyhtX25hbWUpOworICAgIGlm
ICh0eXBlcy5jb250YWlucygidGV4dC9odG1sIl9zKSkgeworICAgICAgICBhdXRvIGJ1ZmZlciA9
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZEJ1ZmZlckZy
b21DbGlwYm9hcmQobV9uYW1lLCAidGV4dC9odG1sIl9zKTsKKyAgICAgICAgaWYgKGJ1ZmZlciAm
JiByZWFkZXIucmVhZEhUTUwoU3RyaW5nOjpmcm9tVVRGOChidWZmZXItPmRhdGEoKSwgYnVmZmVy
LT5zaXplKCkpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocG9saWN5
ID09IFdlYkNvbnRlbnRSZWFkaW5nUG9saWN5OjpPbmx5UmljaFRleHRUeXBlcykKKyAgICAgICAg
cmV0dXJuOworCisgICAgc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBpbWFnZVR5cGVzW10gPSB7
ICJpbWFnZS9wbmciX3MsICJpbWFnZS9qcGVnIl9zLCAiaW1hZ2UvZ2lmIl9zLCAiaW1hZ2UvYm1w
Il9zLCAiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIl9zLCAiaW1hZ2UveC1pY29uIl9zIH07Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBpbWFnZVR5cGUgOiBpbWFnZVR5cGVzKSB7CisgICAgICAgIGlm
ICh0eXBlcy5jb250YWlucyhpbWFnZVR5cGUpKSB7CisgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZEJ1ZmZlckZy
b21DbGlwYm9hcmQobV9uYW1lLCBpbWFnZVR5cGUpOworICAgICAgICAgICAgaWYgKCFidWZmZXIt
PmlzRW1wdHkoKSAmJiByZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBp
bWFnZVR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICh0eXBlcy5jb250YWlucygidGV4dC91cmktbGlzdCJfcykpIHsKKyAgICAgICAgYXV0
byBmaWxlUGF0aHMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PnJlYWRGaWxlUGF0aHNGcm9tQ2xpcGJvYXJkKG1fbmFtZSk7CisgICAgICAgIGlmIChyZWFkZXIu
cmVhZEZpbGVQYXRocyhmaWxlUGF0aHMpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICh0eXBlcy5jb250YWlucygidGV4dC9wbGFpbiJfcykgfHwgdHlwZXMuY29udGFpbnMo
InRleHQvcGxhaW47Y2hhcnNldD11dGYtOCJfcykpIHsKKyAgICAgICAgYXV0byB0ZXh0ID0gcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5yZWFkVGV4dEZyb21DbGlw
Ym9hcmQobV9uYW1lKTsKKyAgICAgICAgaWYgKCF0ZXh0LmlzTnVsbCgpICYmIHJlYWRlci5yZWFk
UGxhaW5UZXh0KHRleHQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBQ
YXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyJiByZWFkZXIpCiB7Ci0gICAgcmVh
ZEZyb21DbGlwYm9hcmQoKTsKLSAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogbV9zZWxlY3Rpb25E
YXRhLT5maWxlbmFtZXMoKSkKLSAgICAgICAgcmVhZGVyLnJlYWRGaWxlbmFtZShmaWxlbmFtZSk7
CisgICAgYXV0byBmaWxlUGF0aHMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0
cmF0ZWd5KCktPnJlYWRGaWxlUGF0aHNGcm9tQ2xpcGJvYXJkKG1fbmFtZSk7CisgICAgZm9yIChj
b25zdCBhdXRvJiBmaWxlUGF0aCA6IGZpbGVQYXRocykKKyAgICAgICAgcmVhZGVyLnJlYWRGaWxl
bmFtZShmaWxlUGF0aCk7CiB9CiAKIGJvb2wgUGFzdGVib2FyZDo6aGFzRGF0YSgpCiB7Ci0gICAg
cmVhZEZyb21DbGlwYm9hcmQoKTsKLSAgICByZXR1cm4gbV9zZWxlY3Rpb25EYXRhLT5oYXNUZXh0
KCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNNYXJrdXAoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhh
c1VSSUxpc3QoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc0ltYWdlKCkgfHwgbV9zZWxlY3Rpb25E
YXRhLT5oYXNVbmtub3duVHlwZURhdGEoKTsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKQorICAg
ICAgICByZXR1cm4gbV9zZWxlY3Rpb25EYXRhLT5oYXNUZXh0KCkgfHwgbV9zZWxlY3Rpb25EYXRh
LT5oYXNNYXJrdXAoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc1VSSUxpc3QoKSB8fCBtX3NlbGVj
dGlvbkRhdGEtPmhhc0ltYWdlKCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNVbmtub3duVHlwZURh
dGEoKTsKKyAgICByZXR1cm4gIXBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+dHlwZXMobV9uYW1lKS5pc0VtcHR5KCk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IFBhc3Rl
Ym9hcmQ6OnR5cGVzU2FmZUZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYpCkBAIC0yNjMsNyArMzE4
LDggQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MoY29u
c3QgU3RyaW5nJikKIAogVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lV
bnNhZmVCaW5kaW5ncygpCiB7Ci0gICAgcmVhZEZyb21DbGlwYm9hcmQoKTsKKyAgICBpZiAoIW1f
c2VsZWN0aW9uRGF0YSkKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+dHlwZXMobV9uYW1lKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHR5
cGVzOwogICAgIGlmIChtX3NlbGVjdGlvbkRhdGEtPmhhc1RleHQoKSkgewpAQCAtMjk0LDcgKzM1
MCwxMyBAQCBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZE9yaWdpbigpCiAKIFN0cmluZyBQYXN0ZWJv
YXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICByZWFkRnJvbUNsaXBi
b2FyZCgpOworICAgIGlmICghbV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIGlmICh0eXBlLnN0
YXJ0c1dpdGgoInRleHQvcGxhaW4iKSkKKyAgICAgICAgICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRUZXh0RnJvbUNsaXBib2FyZChtX25h
bWUpOworCisgICAgICAgIGF1dG8gYnVmZmVyID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5yZWFkQnVmZmVyRnJvbUNsaXBib2FyZChtX25hbWUsIHR5cGUpOwor
ICAgICAgICByZXR1cm4gYnVmZmVyID8gU3RyaW5nOjpmcm9tVVRGOChidWZmZXItPmRhdGEoKSwg
YnVmZmVyLT5zaXplKCkpIDogU3RyaW5nKCk7CisgICAgfQogCiAgICAgc3dpdGNoIChzZWxlY3Rp
b25EYXRhVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlKSkgewogICAgIGNhc2UgQ2xpcGJv
YXJkRGF0YVR5cGVVUklMaXN0OgpAQCAtMzExLDcgKzM3Myw3IEBAIFN0cmluZyBQYXN0ZWJvYXJk
OjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiB7IH07CiB9CiAKIFN0cmluZyBQYXN0
ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYpCkBAIC0zMjIsOCAr
Mzg0LDE3IEBAIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0
IFN0cmluZyYpCiAKIFBhc3RlYm9hcmQ6OkZpbGVDb250ZW50U3RhdGUgUGFzdGVib2FyZDo6Zmls
ZUNvbnRlbnRTdGF0ZSgpCiB7Ci0gICAgcmVhZEZyb21DbGlwYm9hcmQoKTsKLSAgICByZXR1cm4g
bV9zZWxlY3Rpb25EYXRhLT5maWxlbmFtZXMoKS5pc0VtcHR5KCkgPyBGaWxlQ29udGVudFN0YXRl
OjpOb0ZpbGVPckltYWdlRGF0YSA6IEZpbGVDb250ZW50U3RhdGU6Ok1heUNvbnRhaW5GaWxlUGF0
aHM7CisgICAgaWYgKG1fc2VsZWN0aW9uRGF0YSkKKyAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9u
RGF0YS0+ZmlsZW5hbWVzKCkuaXNFbXB0eSgpID8gRmlsZUNvbnRlbnRTdGF0ZTo6Tm9GaWxlT3JJ
bWFnZURhdGEgOiBGaWxlQ29udGVudFN0YXRlOjpNYXlDb250YWluRmlsZVBhdGhzOworCisgICAg
YXV0byB0eXBlcyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
dHlwZXMobV9uYW1lKTsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoInRleHQvdXJpLWxpc3QiX3Mp
KQorICAgICAgICByZXR1cm4gRmlsZUNvbnRlbnRTdGF0ZTo6TWF5Q29udGFpbkZpbGVQYXRoczsK
KworICAgIGF1dG8gcmVzdWx0ID0gdHlwZXMuZmluZE1hdGNoaW5nKFtdKGNvbnN0IFN0cmluZyYg
dHlwZSkgeworICAgICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlKHR5cGUpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQgPT0gbm90Rm91bmQg
PyBGaWxlQ29udGVudFN0YXRlOjpOb0ZpbGVPckltYWdlRGF0YSA6IEZpbGVDb250ZW50U3RhdGU6
Ok1heUNvbnRhaW5GaWxlUGF0aHM7CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVNYXJrdXAo
Y29uc3QgU3RyaW5nJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJv
YXJkSGVscGVyLmNwcAppbmRleCA1NzQ5NjZhNTlmYmYuLjUxYzhkOThkMjhjNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcApAQCAtMjgs
NyArMjgsNiBAQAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9u
RGF0YS5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUu
aD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCkBAIC05Niw0MSArOTUsNiBAQCBzdGF0aWMgU3RyaW5nIHNlbGVjdGlvbkRh
dGFUb1VURjhTdHJpbmcoR3RrU2VsZWN0aW9uRGF0YSogZGF0YSkKICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChtYXJrdXBTdHJpbmcuZ2V0KCkpOwogfQogCi12b2lkIFBhc3RlYm9hcmRIZWxw
ZXI6OmdldENsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBTZWxlY3Rp
b25EYXRhJiBzZWxlY3Rpb24pCi17Ci0gICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190ZXh0
X2F2YWlsYWJsZShjbGlwYm9hcmQpKSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHRleHRE
YXRhKGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dChjbGlwYm9hcmQpKTsKLSAgICAgICAgaWYg
KHRleHREYXRhKQotICAgICAgICAgICAgc2VsZWN0aW9uLnNldFRleHQoU3RyaW5nOjpmcm9tVVRG
OCh0ZXh0RGF0YS5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRf
aXNfdGFyZ2V0X2F2YWlsYWJsZShjbGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7Ci0gICAgICAgIGlm
IChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50
cyhjbGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWFya3VwKHNl
bGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwotICAgICAgICAgICAgcmVtb3ZlTWFya3Vw
UHJlZml4KG1hcmt1cCk7Ci0gICAgICAgICAgICBzZWxlY3Rpb24uc2V0TWFya3VwKG1hcmt1cCk7
Ci0gICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfZnJlZShkYXRhKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGFyZ2V0X2F2YWlsYWJsZShj
bGlwYm9hcmQsIHVyaUxpc3RBdG9tKSkgewotICAgICAgICBpZiAoR3RrU2VsZWN0aW9uRGF0YSog
ZGF0YSA9IGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfY29udGVudHMoY2xpcGJvYXJkLCB1cmlMaXN0
QXRvbSkpIHsKLSAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRVUklMaXN0KHNlbGVjdGlvbkRhdGFU
b1VURjhTdHJpbmcoZGF0YSkpOwotICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2ZyZWUo
ZGF0YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lz
X2ltYWdlX2F2YWlsYWJsZShjbGlwYm9hcmQpKSB7Ci0gICAgICAgIGlmIChHUmVmUHRyPEdka1Bp
eGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfaW1hZ2UoY2xp
cGJvYXJkKSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2Ug
PSBhZG9wdFJlZihnZGtfY2Fpcm9fc3VyZmFjZV9jcmVhdGVfZnJvbV9waXhidWYocGl4YnVmLmdl
dCgpLCAxLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBSZWY8SW1hZ2U+IGltYWdlID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKHN1cmZhY2UpKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbi5z
ZXRJbWFnZShpbWFnZS5wdHIoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzZWxlY3Rpb24u
c2V0Q2FuU21hcnRSZXBsYWNlKGd0a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxl
KGNsaXBib2FyZCwgc21hcnRQYXN0ZUF0b20pKTsKLX0KLQogR1JlZlB0cjxHdGtUYXJnZXRMaXN0
PiBQYXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yU2VsZWN0aW9uRGF0YShjb25zdCBTZWxl
Y3Rpb25EYXRhJiBzZWxlY3Rpb24pCiB7CiAgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0
ID0gYWRvcHRHUmVmKGd0a190YXJnZXRfbGlzdF9uZXcobnVsbHB0ciwgMCkpOwpAQCAtMjY1LDU3
ICsyMjksNiBAQCBWZWN0b3I8R2RrQXRvbT4gUGFzdGVib2FyZEhlbHBlcjo6ZHJvcEF0b21zRm9y
Q29udGV4dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZwogICAgIHJldHVybiBkcm9wQXRvbXM7
CiB9CiAKLXN0YXRpYyBTZWxlY3Rpb25EYXRhKiBzZXR0aW5nQ2xpcGJvYXJkU2VsZWN0aW9uOwot
Ci1zdHJ1Y3QgQ2xpcGJvYXJkU2V0RGF0YSB7Ci0gICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxM
T0NBVEVEOwotICAgIENsaXBib2FyZFNldERhdGEoU2VsZWN0aW9uRGF0YSYgc2VsZWN0aW9uLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzZWxlY3Rpb25DbGVhcmVkQ2FsbGJhY2spCi0gICAgICAg
IDogc2VsZWN0aW9uRGF0YShzZWxlY3Rpb24pCi0gICAgICAgICwgc2VsZWN0aW9uQ2xlYXJlZENh
bGxiYWNrKFdURk1vdmUoc2VsZWN0aW9uQ2xlYXJlZENhbGxiYWNrKSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgfkNsaXBib2FyZFNldERhdGEoKSA9IGRlZmF1bHQ7Ci0KLSAgICBSZWY8U2VsZWN0aW9u
RGF0YT4gc2VsZWN0aW9uRGF0YTsKLSAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gc2VsZWN0aW9u
Q2xlYXJlZENhbGxiYWNrOwotfTsKLQotc3RhdGljIHZvaWQgZ2V0Q2xpcGJvYXJkQ29udGVudHND
YWxsYmFjayhHdGtDbGlwYm9hcmQqLCBHdGtTZWxlY3Rpb25EYXRhICpzZWxlY3Rpb25EYXRhLCBn
dWludCBpbmZvLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBhdXRvKiBkYXRhID0gc3RhdGlj
X2Nhc3Q8Q2xpcGJvYXJkU2V0RGF0YSo+KHVzZXJEYXRhKTsKLSAgICBQYXN0ZWJvYXJkSGVscGVy
OjpzaW5nbGV0b24oKS5maWxsU2VsZWN0aW9uRGF0YShkYXRhLT5zZWxlY3Rpb25EYXRhLCBpbmZv
LCBzZWxlY3Rpb25EYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJDbGlwYm9hcmRDb250ZW50
c0NhbGxiYWNrKEd0a0NsaXBib2FyZCosIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDbGlwYm9hcmRTZXREYXRhPiBkYXRhKHN0YXRpY19jYXN0PENsaXBib2FyZFNl
dERhdGEqPih1c2VyRGF0YSkpOwotICAgIGlmIChkYXRhLT5zZWxlY3Rpb25DbGVhcmVkQ2FsbGJh
Y2spCi0gICAgICAgIGRhdGEtPnNlbGVjdGlvbkNsZWFyZWRDYWxsYmFjaygpOwotfQotCi12b2lk
IFBhc3RlYm9hcmRIZWxwZXI6OndyaXRlQ2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiBj
bGlwYm9hcmQsIGNvbnN0IFNlbGVjdGlvbkRhdGEmIHNlbGVjdGlvbiwgV1RGOjpGdW5jdGlvbjx2
b2lkKCk+JiYgcHJpbWFyeVNlbGVjdGlvbkNsZWFyZWQpCi17Ci0gICAgR1JlZlB0cjxHdGtUYXJn
ZXRMaXN0PiBsaXN0ID0gdGFyZ2V0TGlzdEZvclNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uKTsKLQot
ICAgIGludCBudW1iZXJPZlRhcmdldHM7Ci0gICAgR3RrVGFyZ2V0RW50cnkqIHRhYmxlID0gZ3Rr
X3RhcmdldF90YWJsZV9uZXdfZnJvbV9saXN0KGxpc3QuZ2V0KCksICZudW1iZXJPZlRhcmdldHMp
OwotCi0gICAgaWYgKG51bWJlck9mVGFyZ2V0cyA+IDAgJiYgdGFibGUpIHsKLSAgICAgICAgU2V0
Rm9yU2NvcGU8U2VsZWN0aW9uRGF0YSo+IGNoYW5nZShzZXR0aW5nQ2xpcGJvYXJkU2VsZWN0aW9u
LCBjb25zdF9jYXN0PFNlbGVjdGlvbkRhdGEqPigmc2VsZWN0aW9uKSk7Ci0gICAgICAgIGF1dG8g
ZGF0YSA9IG1ha2VVbmlxdWU8Q2xpcGJvYXJkU2V0RGF0YT4oKnNldHRpbmdDbGlwYm9hcmRTZWxl
Y3Rpb24sIFdURk1vdmUocHJpbWFyeVNlbGVjdGlvbkNsZWFyZWQpKTsKLSAgICAgICAgaWYgKGd0
a19jbGlwYm9hcmRfc2V0X3dpdGhfZGF0YShjbGlwYm9hcmQsIHRhYmxlLCBudW1iZXJPZlRhcmdl
dHMsIGdldENsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2ssIGNsZWFyQ2xpcGJvYXJkQ29udGVudHND
YWxsYmFjaywgZGF0YS5nZXQoKSkpIHsKLSAgICAgICAgICAgIGd0a19jbGlwYm9hcmRfc2V0X2Nh
bl9zdG9yZShjbGlwYm9hcmQsIG51bGxwdHIsIDApOwotICAgICAgICAgICAgLy8gV2hlbiBndGtf
Y2xpcGJvYXJkX3NldF93aXRoX2RhdGEoKSBzdWNjZWVkcyBjbGVhckNsaXBib2FyZENvbnRlbnRz
Q2FsbGJhY2sgdGFrZXMgdGhlIG93bmVyc2hpcCBvZiBkYXRhLCBzbyB3ZSBsZWFrIGl0IGhlcmUu
Ci0gICAgICAgICAgICBkYXRhLnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAg
ICAgICBndGtfY2xpcGJvYXJkX2NsZWFyKGNsaXBib2FyZCk7Ci0KLSAgICBpZiAodGFibGUpCi0g
ICAgICAgIGd0a190YXJnZXRfdGFibGVfZnJlZSh0YWJsZSwgbnVtYmVyT2ZUYXJnZXRzKTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gIVVTRShHVEs0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKaW5kZXggNGMzZjQ1
MTA4MWU2Li41NTliNjY3MGUwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Bhc3RlYm9hcmRIZWxwZXIuaApAQCAtNDAsMTUgKzQwLDExIEBAIGNsYXNzIFBhc3RlYm9hcmRI
ZWxwZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXN0ZWJvYXJkSGVscGVyJiBzaW5nbGV0b24o
KTsKIAotICAgIGVudW0gU21hcnRQYXN0ZUluY2x1c2lvbiB7IEluY2x1ZGVTbWFydFBhc3RlLCBE
b05vdEluY2x1ZGVTbWFydFBhc3RlIH07Ci0KICAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0
KCkgY29uc3Q7CiAgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiB0YXJnZXRMaXN0Rm9yU2VsZWN0
aW9uRGF0YShjb25zdCBTZWxlY3Rpb25EYXRhJik7CiAgICAgdm9pZCBmaWxsU2VsZWN0aW9uRGF0
YShjb25zdCBTZWxlY3Rpb25EYXRhJiwgdW5zaWduZWQsIEd0a1NlbGVjdGlvbkRhdGEqKTsKICAg
ICB2b2lkIGZpbGxTZWxlY3Rpb25EYXRhKEd0a1NlbGVjdGlvbkRhdGEqLCB1bnNpZ25lZCwgU2Vs
ZWN0aW9uRGF0YSYpOwogICAgIFZlY3RvcjxHZGtBdG9tPiBkcm9wQXRvbXNGb3JDb250ZXh0KEd0
a1dpZGdldCosIEdka0RyYWdDb250ZXh0Kik7Ci0gICAgdm9pZCB3cml0ZUNsaXBib2FyZENvbnRl
bnRzKEd0a0NsaXBib2FyZCosIGNvbnN0IFNlbGVjdGlvbkRhdGEmLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJiBwcmltYXJ5U2VsZWN0aW9uQ2xlYXJlZCA9IG51bGxwdHIpOwotICAgIHZvaWQgZ2V0
Q2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiwgU2VsZWN0aW9uRGF0YSYpOwogCiAgICAg
ZW51bSBQYXN0ZWJvYXJkVGFyZ2V0VHlwZSB7IFRhcmdldFR5cGVNYXJrdXAsIFRhcmdldFR5cGVU
ZXh0LCBUYXJnZXRUeXBlSW1hZ2UsIFRhcmdldFR5cGVVUklMaXN0LCBUYXJnZXRUeXBlTmV0c2Nh
cGVVUkwsIFRhcmdldFR5cGVTbWFydFBhc3RlLCBUYXJnZXRUeXBlVW5rbm93biB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJkR3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVBhc3RlYm9hcmRHdGsu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzk3ZTlmZjNmYzAuLjAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJk
R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDE2IFJlZCBIYXQgSW5jLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUGFzdGVib2FyZC5oIgotCi0j
aW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCi0jaW5jbHVk
ZSAiU2VsZWN0aW9uRGF0YS5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUg
PGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotI2lmIFVTRShHVEs0KQotUGxhdGZvcm1QYXN0ZWJvYXJkOjpQbGF0Zm9ybVBhc3RlYm9hcmQo
Y29uc3QgU3RyaW5nJikKLXsKLX0KLSNlbHNlCi1QbGF0Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3Jt
UGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQotICAgIDogbV9jbGlwYm9h
cmQoZ3RrX2NsaXBib2FyZF9nZXQoZ2RrX2F0b21faW50ZXJuKHBhc3RlYm9hcmROYW1lLnV0Zjgo
KS5kYXRhKCksIFRSVUUpKSkKLXsKLSAgICBBU1NFUlQobV9jbGlwYm9hcmQpOwotfQotI2VuZGlm
Ci0KLXZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFNlbGVj
dGlvbkRhdGEmIHNlbGVjdGlvbiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgcHJpbWFyeVNlbGVj
dGlvbkNsZWFyZWQpCi17Ci0jaWYgIVVTRShHVEs0KQotICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNp
bmdsZXRvbigpLndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQsIHNlbGVjdGlvbiwg
Z3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9QUklNQVJZKSA9PSBtX2NsaXBib2FyZCA/
IFdURk1vdmUocHJpbWFyeVNlbGVjdGlvbkNsZWFyZWQpIDogbnVsbHB0cik7Ci0jZW5kaWYKLX0K
LQotUmVmPFNlbGVjdGlvbkRhdGE+IFBsYXRmb3JtUGFzdGVib2FyZDo6cmVhZEZyb21DbGlwYm9h
cmQoKQotewotICAgIFJlZjxTZWxlY3Rpb25EYXRhPiBzZWxlY3Rpb24oU2VsZWN0aW9uRGF0YTo6
Y3JlYXRlKCkpOwotI2lmICFVU0UoR1RLNCkKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0
b24oKS5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCwgc2VsZWN0aW9uLmdldCgpKTsK
LSNlbmRpZgotICAgIHJldHVybiBzZWxlY3Rpb247Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFBsYXRm
b3JtUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5n
JikgY29uc3QKLXsKLSAgICByZXR1cm4geyB9OwotfQotCi1pbnQ2NF90IFBsYXRmb3JtUGFzdGVi
b2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmKQotewotICAgIHJldHVybiAw
OwotfQotCi1pbnQ2NF90IFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgVmVjdG9yPFBh
c3RlYm9hcmRDdXN0b21EYXRhPiYpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRhLmNwcAppbmRleCA4MmZlNDcxYTU5
YzEuLjEwNjA1NTE3ZDAxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1NlbGVjdGlvbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWxl
Y3Rpb25EYXRhLmNwcApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIFNlbGVjdGlvbkRhdGE6OnNldFVS
SUxpc3QoY29uc3QgU3RyaW5nJiB1cmlMaXN0U3RyaW5nKQogICAgIC8vIHdpbGwgZ2V0IGFuIGVt
cHR5IHN0cmluZy4gVGhpcyBpcyBpbiBsaW5lIHdpdGggdGhlIEhUTUw1IHNwZWMgKHNlZQogICAg
IC8vICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpLiBBbHNvIGV4
dHJhY3QgYWxsIGZpbGVuYW1lcwogICAgIC8vIGZyb20gdGhlIFVSSSBsaXN0LgotICAgIGJvb2wg
c2V0VVJMID0gZmFsc2U7CisgICAgYm9vbCBzZXRVUkwgPSBoYXNVUkwoKTsKICAgICBmb3IgKGF1
dG8mIGxpbmUgOiB1cmlMaXN0U3RyaW5nLnNwbGl0KCdcbicpKSB7CiAgICAgICAgIGxpbmUgPSBs
aW5lLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpCkBAIC03
OSw4ICs3OSwxNCBAQCB2b2lkIFNlbGVjdGlvbkRhdGE6OnNldFVSSUxpc3QoY29uc3QgU3RyaW5n
JiB1cmlMaXN0U3RyaW5nKQogdm9pZCBTZWxlY3Rpb25EYXRhOjpzZXRVUkwoY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7CiAgICAgbV91cmwgPSB1cmw7Ci0gICAgbV91cmlM
aXN0ID0gdXJsOwotICAgIHNldFRleHQodXJsLnN0cmluZygpKTsKKyAgICBpZiAobV91cmlMaXN0
LmlzRW1wdHkoKSkKKyAgICAgICAgbV91cmlMaXN0ID0gdXJsOworCisgICAgaWYgKCFoYXNUZXh0
KCkpCisgICAgICAgIHNldFRleHQodXJsLnN0cmluZygpKTsKKworICAgIGlmIChoYXNNYXJrdXAo
KSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGFjdHVhbExhYmVsKGxhYmVsKTsKICAg
ICBpZiAoYWN0dWFsTGFiZWwuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBjYTNlNDM4NDY4ZjcuLjQx
N2Q3ZDMzNzM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAyMC0wNS0wNiAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmV3
b3JrIGNsaXBib2FyZCBoYW5kbGluZyBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNTExCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGFzeW5jIEFQSXMgdG8g
YXZvaWQgYmxvY2tpbmcgdGhlIFVJIHByb2Nlc3MgZHVyaW5nIHRoZSBjb21tdW5pY2F0aW9uIHdp
dGggdGhlIGNsaXBib2FyZC4gSW4gR1RLNCBvbmx5IGFzeW5jCisgICAgICAgIEFQSXMgYXJlIGF2
YWlsYWJsZS4gQWRkIENsaXBib2FyZCBjbGFzcyB0byBoYW5kbGUgdGhlIGNvbW11bmljYXRpb24g
d2l0aCB0aGUgY2xpcGJvYXJkIHdpdGggdGhlIEdUSworICAgICAgICBpbXBsZW1lbnRhdGlvbiBp
biBDbGlwYm9hcmRHdGszIGFuZCBDbGlwYm9hcmRHdGs0IGZpbGVzLgorCisgICAgICAgICogU2hh
cmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2VsZWN0
aW9uRGF0YTo6V2ViU2VsZWN0aW9uRGF0YSk6IEFkZCBjb25zdHJ1Y3RvciByZWNlaXZuaWcgYW4g
cnZhbHVlIHJlZmVyZW5jZS4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEu
aDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFz
dGVib2FyZFByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0NsaXBib2FyZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpjbGlwYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpwcmltYXJ5
KToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpnZXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9ndGsvQ2xpcGJvYXJkLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvQ2xpcGJv
YXJkR3RrMy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OkNsaXBib2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OmlzUHJpbWFyeUNsaXBib2FyZCk6CisgICAgICAgIChXZWJL
aXQ6OkNsaXBib2FyZDo6dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkZvcm1hdHNBc3lu
Y0RhdGE6OkZvcm1hdHNBc3luY0RhdGEpOgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OmZv
cm1hdHMpOgorICAgICAgICAoV2ViS2l0OjpSZWFkVGV4dEFzeW5jRGF0YTo6UmVhZFRleHRBc3lu
Y0RhdGEpOgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OnJlYWRUZXh0KToKKyAgICAgICAg
KFdlYktpdDo6UmVhZEZpbGVQYXRoc0FzeW5jRGF0YTo6UmVhZEZpbGVQYXRoc0FzeW5jRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6cmVhZEZpbGVQYXRocyk6CisgICAgICAgIChX
ZWJLaXQ6OlJlYWRCdWZmZXJBc3luY0RhdGE6OlJlYWRCdWZmZXJBc3luY0RhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpDbGlwYm9hcmQ6OnJlYWRCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpDbGlw
Ym9hcmQ6OndyaXRlKToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpjbGVhcik6CisgICAg
ICAgICogVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGs0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OkNsaXBib2FyZDo6Q2xpcGJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJk
Ojp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpmb3JtYXRzKToKKyAg
ICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpyZWFkVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkNs
aXBib2FyZDo6cmVhZEZpbGVQYXRocyk6CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6cmVh
ZEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6d3JpdGUpOgorICAgICAgICAo
V2ViS2l0OjpDbGlwYm9hcmQ6OmNsZWFyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBh
c3RlYm9hcmRQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94
eTo6Z2V0VHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRU
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpyZWFkRmlsZVBhdGhz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpyZWFkQnVmZmVyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVRvQ2xpcGJvYXJkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZFByb3h5OjpjbGVhckNsaXBib2FyZCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnR5cGVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkVGV4dEZyb21DbGlwYm9hcmQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRGaWxlUGF0aHNG
cm9tQ2xpcGJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpy
ZWFkQnVmZmVyRnJvbUNsaXBib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6d3JpdGVUb0NsaXBib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Y2xlYXJDbGlwYm9hcmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6CisKIDIwMjAtMDUtMDggIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
IEZpeCBHVEs0IGJ1aWxkIGFmdGVyIHIyNjEzNzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0
ay9XZWJTZWxlY3Rpb25EYXRhLmNwcAppbmRleCAxOWZjMjRhYzY5ZDYuLjliNTA2YjM1YjNlMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRhLmNwcApAQCAt
NDEsNiArNDEsMTEgQEAgV2ViU2VsZWN0aW9uRGF0YTo6V2ViU2VsZWN0aW9uRGF0YShSZWY8V2Vi
Q29yZTo6U2VsZWN0aW9uRGF0YT4mJiBkYXRhKQogewogfQogCitXZWJTZWxlY3Rpb25EYXRhOjpX
ZWJTZWxlY3Rpb25EYXRhKFdlYkNvcmU6OlNlbGVjdGlvbkRhdGEmJiBkYXRhKQorICAgIDogc2Vs
ZWN0aW9uRGF0YShkYXRhKQoreworfQorCiB2b2lkIFdlYlNlbGVjdGlvbkRhdGE6OmVuY29kZShJ
UEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBzZWxlY3Rpb25E
YXRhLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVj
dGlvbkRhdGEuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRhLmgK
aW5kZXggZGQ2ZGFhZTQwODM5Li4yMDVmOGVlYzAyYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRhLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEuaApAQCAtMzEsNiArMzEsNyBAQCBzdHJ1Y3QgV2ViU2Vs
ZWN0aW9uRGF0YSB7CiAgICAgV2ViU2VsZWN0aW9uRGF0YSgpOwogICAgIGV4cGxpY2l0IFdlYlNl
bGVjdGlvbkRhdGEoY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uRGF0YSYpOwogICAgIGV4cGxpY2l0
IFdlYlNlbGVjdGlvbkRhdGEoUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+JiYpOworICAgIGV4
cGxpY2l0IFdlYlNlbGVjdGlvbkRhdGEoV2ViQ29yZTo6U2VsZWN0aW9uRGF0YSYmKTsKIAogICAg
IFJlZjxXZWJDb3JlOjpTZWxlY3Rpb25EYXRhPiBzZWxlY3Rpb25EYXRhOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RL
LnR4dAppbmRleCAzZmJjYjQxNDg0NTAuLjY4ZjAwNTg3NzZiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0
CkBAIC0yNTMsNiArMjUzLDkgQEAgVUlQcm9jZXNzL2dzdHJlYW1lci9XZWJQYWdlUHJveHlHU3Ry
ZWFtZXIuY3BwCiBVSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlLmNwcCBAbm8t
dW5pZnkKIFVJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kLmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVYMTEuY3BwIEBu
by11bmlmeQorVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmQuY3BwCitVSVByb2Nlc3MvZ3RrL0NsaXBi
b2FyZEd0azMuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGs0LmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcAogVUlQcm9jZXNz
L2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9ndGsvSGFyZHdhcmVBY2NlbGVy
YXRpb25NYW5hZ2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFzdGVib2FyZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJk
UHJveHkuaAppbmRleCA0NzBmNTk5ZTAzZGUuLjdiOGFiYTg0YzhjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKQEAgLTM0LDYgKzM0LDEwIEBACiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KIAor
bmFtZXNwYWNlIElQQyB7CitjbGFzcyBTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlOworfQorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIFBhc3RlYm9hcmRDdXN0b21E
YXRhOwpAQCAtNjYsNiArNzAsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShHVEspCiAgICAg
dm9pZCBzZXRQcmltYXJ5U2VsZWN0aW9uT3duZXIoV2ViRnJhbWVQcm94eSopOworICAgIFdlYkZy
YW1lUHJveHkqIHByaW1hcnlTZWxlY3Rpb25Pd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFy
eVNlbGVjdGlvbk93bmVyOyB9CiAgICAgdm9pZCBkaWREZXN0cm95RnJhbWUoV2ViRnJhbWVQcm94
eSopOwogI2VuZGlmCiAKQEAgLTExOCwxMSArMTIzLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1
cmxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcoSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJiB1cmwsIFN0
cmluZyYmIHRpdGxlKT4mJik7CiAKICNpZiBQTEFURk9STShHVEspCi0gICAgdm9pZCB3cml0ZVRv
Q2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFdlYlNlbGVjdGlv
bkRhdGEmKTsKLSAgICB2b2lkIHJlYWRGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViU2VsZWN0aW9uRGF0YSYmKT4mJik7
CisgICAgdm9pZCBnZXRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKKyAgICB2b2lkIHJlYWRUZXh0
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Ry
aW5nJiYpPiYmKTsKKyAgICB2b2lkIHJlYWRGaWxlUGF0aHMoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJik7Cisg
ICAgdm9pZCByZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpTaGFyZWRC
dWZmZXJEYXRhUmVmZXJlbmNlJiYpPiYmKTsKKyAgICB2b2lkIHdyaXRlVG9DbGlwYm9hcmQoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV2ViU2VsZWN0aW9uRGF0YSYmKTsKKyAgICB2b2lk
IGNsZWFyQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogCiAgICAgV2Vi
RnJhbWVQcm94eSogbV9wcmltYXJ5U2VsZWN0aW9uT3duZXIgeyBudWxscHRyIH07Ci0gICAgV2Vi
RnJhbWVQcm94eSogbV9mcmFtZVdyaXRpbmdUb0NsaXBib2FyZCB7IG51bGxwdHIgfTsKICNlbmRp
ZiAvLyBQTEFURk9STShHVEspCiAKICNpZiBVU0UoTElCV1BFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDg4
YzMwNjA5ODkwNS4uN2ZkNzY3ZmVhN2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC02MSw4ICs2MSwxMiBA
QCBtZXNzYWdlcyAtPiBXZWJQYXN0ZWJvYXJkUHJveHkgTm90UmVmQ291bnRlZCB7CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHZXRUeXBlcyhTdHJpbmcgcGFzdGVib2FyZE5hbWUp
IC0+IChWZWN0b3I8U3RyaW5nPiB0eXBlcykgU3luY2hyb25vdXMKKyAgICBSZWFkVGV4dChTdHJp
bmcgcGFzdGVib2FyZE5hbWUpIC0+IChTdHJpbmcgdGV4dCkgU3luY2hyb25vdXMKKyAgICBSZWFk
RmlsZVBhdGhzKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKFZlY3RvcjxTdHJpbmc+IHR5cGVz
KSBTeW5jaHJvbm91cworICAgIFJlYWRCdWZmZXIoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJp
bmcgcGFzdGVib2FyZFR5cGUpIC0+IChJUEM6OlNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2UgZGF0
YSkgU3luY2hyb25vdXMKICAgICBXcml0ZVRvQ2xpcGJvYXJkKFN0cmluZyBwYXN0ZWJvYXJkTmFt
ZSwgc3RydWN0IFdlYktpdDo6V2ViU2VsZWN0aW9uRGF0YSBwYXN0ZWJvYXJkQ29udGVudCkKLSAg
ICBSZWFkRnJvbUNsaXBib2FyZChTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChzdHJ1Y3QgV2Vi
S2l0OjpXZWJTZWxlY3Rpb25EYXRhIHBhc3RlYm9hcmRDb250ZW50KSBTeW5jaHJvbm91cworICAg
IENsZWFyQ2xpcGJvYXJkKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkKICNlbmRpZgogCiAjaWYgVVNF
KExJQldQRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9DbGlwYm9h
cmQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNDk3NTM3NjAyNTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmNwcApAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworc3RhdGljIENsaXBib2FyZCYgY2xpcGJvYXJkKCkKK3sKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3ll
ZDxDbGlwYm9hcmQ+IG9iamVjdDsKKworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7
CisgICAgICAgIG9iamVjdC5jb25zdHJ1Y3QoQ2xpcGJvYXJkOjpUeXBlOjpDbGlwYm9hcmQpOwor
ICAgIH0pOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIENsaXBib2FyZCYgcHJp
bWFyeSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8Q2xpcGJvYXJkPiBvYmplY3Q7CisKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlRmxhZywgW10geworICAgICAgICBvYmplY3QuY29uc3RydWN0KENsaXBib2FyZDo6
VHlwZTo6UHJpbWFyeSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitDbGlw
Ym9hcmQmIENsaXBib2FyZDo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFt
ZSA9PSAiQ0xJUEJPQVJEIikKKyAgICAgICAgcmV0dXJuIGNsaXBib2FyZCgpOworCisgICAgaWYg
KG5hbWUgPT0gIlBSSU1BUlkiKQorICAgICAgICByZXR1cm4gcHJpbWFyeSgpOworCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi5kZjkyMWJlNWM0ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmgKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKworI2lmICFVU0UoR1RLNCkKK3R5cGVkZWYgc3RydWN0IF9HdGtDbGlwYm9hcmQgR3Rr
Q2xpcGJvYXJkOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNlbGVjdGlv
bkRhdGE7CitjbGFzcyBTaGFyZWRCdWZmZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJGcmFtZVByb3h5OworCitjbGFzcyBDbGlwYm9hcmQgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENsaXBib2FyZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBDbGlwYm9hcmQmIGdldChjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgZW51
bSBjbGFzcyBUeXBlIHsgQ2xpcGJvYXJkLCBQcmltYXJ5IH07CisgICAgZXhwbGljaXQgQ2xpcGJv
YXJkKFR5cGUpOworCisgICAgVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBmb3JtYXRzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOworICAgIHZvaWQgcmVh
ZFRleHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOworICAgIHZvaWQgcmVh
ZEZpbGVQYXRocyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsK
KyAgICB2b2lkIHJlYWRCdWZmZXIoY29uc3QgY2hhciosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
UmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJik+JiYpOworICAgIHZvaWQgd3JpdGUoUmVmPFdl
YkNvcmU6OlNlbGVjdGlvbkRhdGE+JiYpOworICAgIHZvaWQgY2xlYXIoKTsKKworcHJpdmF0ZToK
KyNpZiAhVVNFKEdUSzQpCisgICAgR3RrQ2xpcGJvYXJkKiBtX2NsaXBib2FyZCB7IG51bGxwdHIg
fTsKKyAgICBXZWJGcmFtZVByb3h5KiBtX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkIHsgbnVsbHB0
ciB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGszLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGszLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLmUzOTE1Y2YwNDUyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGszLmNwcApAQCAtMCwwICsxLDIyOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKworI2lmICFVU0UoR1RLNCkKKwor
I2luY2x1ZGUgIldlYlBhc3RlYm9hcmRQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0
ckd0ay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2VsZWN0aW9uRGF0YS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0
Zi9TZXRGb3JTY29wZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ2xpcGJvYXJkOjpDbGlw
Ym9hcmQoVHlwZSB0eXBlKQorICAgIDogbV9jbGlwYm9hcmQoZ3RrX2NsaXBib2FyZF9nZXRfZm9y
X2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgdHlwZSA9PSBUeXBlOjpDbGlwYm9h
cmQgPyBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCA6IEdES19TRUxFQ1RJT05fUFJJTUFSWSkpCit7
Cit9CisKK3N0YXRpYyBib29sIGlzUHJpbWFyeUNsaXBib2FyZChHdGtDbGlwYm9hcmQqIGNsaXBi
b2FyZCkKK3sKKyAgICByZXR1cm4gY2xpcGJvYXJkID09IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9k
aXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05fUFJJTUFSWSk7
Cit9CisKK0NsaXBib2FyZDo6VHlwZSBDbGlwYm9hcmQ6OnR5cGUoKSBjb25zdAoreworICAgIHJl
dHVybiBpc1ByaW1hcnlDbGlwYm9hcmQobV9jbGlwYm9hcmQpID8gVHlwZTo6UHJpbWFyeSA6IFR5
cGU6OkNsaXBib2FyZDsKK30KKworc3RydWN0IEZvcm1hdHNBc3luY0RhdGEgeworICAgIFdURl9N
QUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKworICAgIGV4cGxpY2l0IEZvcm1hdHNBc3luY0Rh
dGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBoYW5kbGVyKQor
ICAgICAgICA6IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlcikpCisgICAgeworICAg
IH0KKworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+IGNvbXBs
ZXRpb25IYW5kbGVyOworfTsKKwordm9pZCBDbGlwYm9hcmQ6OmZvcm1hdHMoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBndGtfY2xpcGJvYXJkX3JlcXVlc3RfdGFyZ2V0cyhtX2NsaXBib2FyZCwgW10oR3RrQ2xpcGJv
YXJkKiBjbGlwYm9hcmQsIEdka0F0b20qIGF0b21zLCBnaW50IGF0b21zQ291bnQsIGdwb2ludGVy
IHVzZXJEYXRhKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGb3JtYXRzQXN5bmNEYXRhPiBk
YXRhKHN0YXRpY19jYXN0PEZvcm1hdHNBc3luY0RhdGEqPih1c2VyRGF0YSkpOworCisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdG9t
c0NvdW50OyArK2kpIHsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gYXRvbShnZGtfYXRv
bV9uYW1lKGF0b21zW2ldKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFN0cmluZzo6ZnJv
bVVURjgoYXRvbS5nZXQoKSkpOworICAgICAgICB9CisgICAgICAgIGRhdGEtPmNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CisgICAgfSwgbmV3IEZvcm1hdHNBc3luY0RhdGEoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKK30KKworc3RydWN0IFJlYWRUZXh0QXN5bmNEYXRh
IHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICBleHBsaWNpdCBS
ZWFkVGV4dEFzeW5jRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBoYW5k
bGVyKQorICAgICAgICA6IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlcikpCisgICAg
eworICAgIH0KKworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiBjb21wbGV0
aW9uSGFuZGxlcjsKK307CisKK3ZvaWQgQ2xpcGJvYXJkOjpyZWFkVGV4dChDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBndGtfY2xp
cGJvYXJkX3JlcXVlc3RfdGV4dChtX2NsaXBib2FyZCwgW10oR3RrQ2xpcGJvYXJkKiwgY29uc3Qg
Y2hhciogdGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlYWRUZXh0QXN5bmNEYXRhPiBkYXRhKHN0YXRpY19jYXN0PFJlYWRUZXh0QXN5bmNEYXRhKj4o
dXNlckRhdGEpKTsKKyAgICAgICAgZGF0YS0+Y29tcGxldGlvbkhhbmRsZXIoU3RyaW5nOjpmcm9t
VVRGOCh0ZXh0KSk7CisgICAgfSwgbmV3IFJlYWRUZXh0QXN5bmNEYXRhKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKSk7Cit9CisKK3N0cnVjdCBSZWFkRmlsZVBhdGhzQXN5bmNEYXRhIHsKKyAg
ICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICBleHBsaWNpdCBSZWFkRmls
ZVBhdGhzQXN5bmNEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+
JiYgaGFuZGxlcikKKyAgICAgICAgOiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGhhbmRsZXIp
KQorICAgIHsKKyAgICB9CisKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJp
bmc+JiYpPiBjb21wbGV0aW9uSGFuZGxlcjsKK307CisKK3ZvaWQgQ2xpcGJvYXJkOjpyZWFkRmls
ZVBhdGhzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgZ3RrX2NsaXBib2FyZF9yZXF1ZXN0X3VyaXMobV9jbGlwYm9h
cmQsIFtdKEd0a0NsaXBib2FyZCosIGNoYXIqKiB1cmlzLCBncG9pbnRlciB1c2VyRGF0YSkgewor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVhZEZpbGVQYXRoc0FzeW5jRGF0YT4gZGF0YShzdGF0
aWNfY2FzdDxSZWFkRmlsZVBhdGhzQXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gcmVzdWx0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyB1cmlzICYm
IHVyaXNbaV07ICsraSkgeworICAgICAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUo
Z19maWxlbmFtZV9mcm9tX3VyaSh1cmlzW2ldLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgICAg
ICAgICBpZiAoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmc6
OmZyb21VVEY4KGZpbGVuYW1lLmdldCgpKSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YS0+Y29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICB9LCBuZXcgUmVhZEZpbGVQYXRo
c0FzeW5jRGF0YShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCitzdHJ1Y3QgUmVh
ZEJ1ZmZlckFzeW5jRGF0YSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwor
CisgICAgZXhwbGljaXQgUmVhZEJ1ZmZlckFzeW5jRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpPiYmIGhhbmRsZXIpCisgICAgICAgIDogY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGVyKSkKKyAgICB7CisgICAgfQorCisgICAgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKT4gY29tcGxl
dGlvbkhhbmRsZXI7Cit9OworCit2b2lkIENsaXBib2FyZDo6cmVhZEJ1ZmZlcihjb25zdCBjaGFy
KiBmb3JtYXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZ3RrX2NsaXBib2FyZF9yZXF1ZXN0
X2NvbnRlbnRzKG1fY2xpcGJvYXJkLCBnZGtfYXRvbV9pbnRlcm4oZm9ybWF0LCBUUlVFKSwgW10o
R3RrQ2xpcGJvYXJkKiwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uLCBncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVhZEJ1ZmZlckFzeW5jRGF0YT4gZGF0
YShzdGF0aWNfY2FzdDxSZWFkQnVmZmVyQXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKyAgICAgICAg
aW50IGNvbnRlbnRzTGVuZ3RoOworICAgICAgICBjb25zdCBhdXRvKiBjb250ZW50cyA9IGd0a19z
ZWxlY3Rpb25fZGF0YV9nZXRfZGF0YV93aXRoX2xlbmd0aChzZWxlY3Rpb24sICZjb250ZW50c0xl
bmd0aCk7CisgICAgICAgIGRhdGEtPmNvbXBsZXRpb25IYW5kbGVyKFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGNvbnRlbnRzLCBjb250ZW50c0xlbmd0aCA+IDAgPyBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvbnRlbnRzTGVuZ3RoKSA6IDApKTsKKyAgICB9LCBuZXcgUmVhZEJ1ZmZlckFzeW5j
RGF0YShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCitzdHJ1Y3QgV3JpdGVBc3lu
Y0RhdGEgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKworICAgIFdyaXRl
QXN5bmNEYXRhKFJlZjxXZWJDb3JlOjpTZWxlY3Rpb25EYXRhPiYmIHNlbGVjdGlvbiwgQ2xpcGJv
YXJkJiBjbGlwYm9hcmQpCisgICAgICAgIDogc2VsZWN0aW9uRGF0YShXVEZNb3ZlKHNlbGVjdGlv
bikpCisgICAgICAgICwgY2xpcGJvYXJkKGNsaXBib2FyZCkKKyAgICB7CisgICAgfQorCisgICAg
UmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+IHNlbGVjdGlvbkRhdGE7CisgICAgQ2xpcGJvYXJk
JiBjbGlwYm9hcmQ7Cit9OworCitlbnVtIENsaXBib2FyZFRhcmdldFR5cGUgeyBNYXJrdXAsIFRl
eHQsIEltYWdlLCBTbWFydFBhc3RlIH07CisKK3ZvaWQgQ2xpcGJvYXJkOjp3cml0ZShSZWY8V2Vi
Q29yZTo6U2VsZWN0aW9uRGF0YT4mJiBzZWxlY3Rpb25EYXRhKQoreworICAgIFNldEZvclNjb3Bl
PFdlYkZyYW1lUHJveHkqPiBmcmFtZVdyaXRpbmdUb0NsaXBib2FyZChtX2ZyYW1lV3JpdGluZ1Rv
Q2xpcGJvYXJkLCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNpbmdsZXRvbigpLnByaW1hcnlTZWxlY3Rp
b25Pd25lcigpKTsKKworICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gbGlzdCA9IGFkb3B0R1Jl
ZihndGtfdGFyZ2V0X2xpc3RfbmV3KG51bGxwdHIsIDApKTsKKyAgICBpZiAoc2VsZWN0aW9uRGF0
YS0+aGFzTWFya3VwKCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdC5nZXQoKSwg
Z2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmcoInRleHQvaHRtbCIpLCAwLCBDbGlwYm9hcmRU
YXJnZXRUeXBlOjpNYXJrdXApOworICAgIGlmIChzZWxlY3Rpb25EYXRhLT5oYXNJbWFnZSgpKQor
ICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMobGlzdC5nZXQoKSwgQ2xp
cGJvYXJkVGFyZ2V0VHlwZTo6SW1hZ2UsIFRSVUUpOworICAgIGlmIChzZWxlY3Rpb25EYXRhLT5o
YXNUZXh0KCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKGxpc3Qu
Z2V0KCksIENsaXBib2FyZFRhcmdldFR5cGU6OlRleHQpOworICAgIGlmIChzZWxlY3Rpb25EYXRh
LT5jYW5TbWFydFJlcGxhY2UoKSkKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0Lmdl
dCgpLCBnZGtfYXRvbV9pbnRlcm5fc3RhdGljX3N0cmluZygiYXBwbGljYXRpb24vdm5kLndlYmtp
dGd0ay5zbWFydHBhc3RlIiksIDAsIENsaXBib2FyZFRhcmdldFR5cGU6OlNtYXJ0UGFzdGUpOwor
CisgICAgaW50IG51bWJlck9mVGFyZ2V0czsKKyAgICBHdGtUYXJnZXRFbnRyeSogdGFibGUgPSBn
dGtfdGFyZ2V0X3RhYmxlX25ld19mcm9tX2xpc3QobGlzdC5nZXQoKSwgJm51bWJlck9mVGFyZ2V0
cyk7CisgICAgaWYgKCFudW1iZXJPZlRhcmdldHMpIHsKKyAgICAgICAgZ3RrX2NsaXBib2FyZF9j
bGVhcihtX2NsaXBib2FyZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGRh
dGEgPSBXVEY6Om1ha2VVbmlxdWU8V3JpdGVBc3luY0RhdGE+KFdURk1vdmUoc2VsZWN0aW9uRGF0
YSksICp0aGlzKTsKKyAgICBnYm9vbGVhbiBzdWNjZWVkZWQgPSBndGtfY2xpcGJvYXJkX3NldF93
aXRoX2RhdGEobV9jbGlwYm9hcmQsIHRhYmxlLCBudW1iZXJPZlRhcmdldHMsCisgICAgICAgIFtd
KEd0a0NsaXBib2FyZCosIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbiwgZ3VpbnQgaW5mbywg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGRhdGEgPSAqc3RhdGljX2Nh
c3Q8V3JpdGVBc3luY0RhdGEqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBhdXRvJiBzZWxlY3Rp
b25EYXRhID0gZGF0YS5zZWxlY3Rpb25EYXRhLmdldCgpOworICAgICAgICAgICAgc3dpdGNoIChp
bmZvKSB7CisgICAgICAgICAgICBjYXNlIENsaXBib2FyZFRhcmdldFR5cGU6Ok1hcmt1cDogewor
ICAgICAgICAgICAgICAgIENTdHJpbmcgbWFya3VwID0gc2VsZWN0aW9uRGF0YS5tYXJrdXAoKS51
dGY4KCk7CisgICAgICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb24s
IGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0L2h0bWwiKSwgOCwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBndWNoYXIqPihtYXJrdXAuZGF0YSgpKSwgbWFya3VwLmxlbmd0aCgpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
Q2xpcGJvYXJkVGFyZ2V0VHlwZTo6VGV4dDoKKyAgICAgICAgICAgICAgICBndGtfc2VsZWN0aW9u
X2RhdGFfc2V0X3RleHQoc2VsZWN0aW9uLCBzZWxlY3Rpb25EYXRhLnRleHQoKS51dGY4KCkuZGF0
YSgpLCAtMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENsaXBi
b2FyZFRhcmdldFR5cGU6OkltYWdlOiB7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkRh
dGEuaGFzSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
cGl4YnVmID0gYWRvcHRHUmVmKHNlbGVjdGlvbkRhdGEuaW1hZ2UoKS0+Z2V0R2RrUGl4YnVmKCkp
OworICAgICAgICAgICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3BpeGJ1ZihzZWxl
Y3Rpb24sIHBpeGJ1Zi5nZXQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDbGlwYm9hcmRUYXJnZXRU
eXBlOjpTbWFydFBhc3RlOgorICAgICAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRf
dGV4dChzZWxlY3Rpb24sICIiLCAtMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgIFtdKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBn
cG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdyaXRlQXN5
bmNEYXRhPiBkYXRhKHN0YXRpY19jYXN0PFdyaXRlQXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKyAg
ICAgICAgICAgIGlmIChpc1ByaW1hcnlDbGlwYm9hcmQoY2xpcGJvYXJkKSAmJiBXZWJQYXN0ZWJv
YXJkUHJveHk6OnNpbmdsZXRvbigpLnByaW1hcnlTZWxlY3Rpb25Pd25lcigpICE9IGRhdGEtPmNs
aXBib2FyZC5tX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkKQorICAgICAgICAgICAgICAgIFdlYlBh
c3RlYm9hcmRQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJpbWFyeVNlbGVjdGlvbk93bmVyKG51bGxw
dHIpOworICAgICAgICB9LCBkYXRhLmdldCgpKTsKKworICAgIGlmIChzdWNjZWVkZWQpIHsKKyAg
ICAgICAgLy8gSW4gY2FzZSBvZiBzdWNjZXNzIHRoZSBjbGlwYm9hcmQgb3ducyBkYXRhLCBzbyB3
ZSByZWxlYXNlIGl0IGhlcmUuCisgICAgICAgIGRhdGEucmVsZWFzZSgpOworCisgICAgICAgIGd0
a19jbGlwYm9hcmRfc2V0X2Nhbl9zdG9yZShtX2NsaXBib2FyZCwgbnVsbHB0ciwgMCk7CisgICAg
fQorICAgIGd0a190YXJnZXRfdGFibGVfZnJlZSh0YWJsZSwgbnVtYmVyT2ZUYXJnZXRzKTsKK30K
Kwordm9pZCBDbGlwYm9hcmQ6OmNsZWFyKCkKK3sKKyAgICBndGtfY2xpcGJvYXJkX2NsZWFyKG1f
Y2xpcGJvYXJkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjBmMWJkOWJhMzUyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3BwCkBAIC0wLDAg
KzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisKKyNpZiBVU0UoR1RL
NCkKKworI2luY2x1ZGUgPFdlYkNvcmUvU2VsZWN0aW9uRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitDbGlwYm9hcmQ6OkNs
aXBib2FyZChUeXBlKQoreworfQorCitDbGlwYm9hcmQ6OlR5cGUgQ2xpcGJvYXJkOjp0eXBlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gVHlwZTo6Q2xpcGJvYXJkOworfQorCit2b2lkIENsaXBib2Fy
ZDo6Zm9ybWF0cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Cit9CisKK3Zv
aWQgQ2xpcGJvYXJkOjpyZWFkVGV4dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworfQor
Cit2b2lkIENsaXBib2FyZDo6cmVhZEZpbGVQYXRocyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpyZWFkQnVmZmVyKGNvbnN0IGNoYXIq
IGZvcm1hdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpKTsKK30KKwordm9pZCBDbGlwYm9hcmQ6OndyaXRl
KGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkRhdGEmKQoreworfQorCit2b2lkIENsaXBib2FyZDo6
Y2xlYXIoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJveHlHdGsuY3Bw
CmluZGV4IDllYzhlODk1OTk2My4uMGExMzJlYzU1MjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcApAQCAtMjYsMjcg
KzI2LDQ1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGFzdGVib2FyZFBy
b3h5LmgiCiAKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXJE
YXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgogI2luY2x1ZGUgIldl
YlNlbGVjdGlvbkRhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVib2FyZC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL1NldEZv
clNjb3BlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFdlYlNlbGVjdGlvbkRhdGEmIHNlbGVjdGlvbikKK3Zv
aWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIFNldEZvclNjb3BlPFdlYkZyYW1lUHJveHkqPiBmcmFtZVdyaXRp
bmdUb0NsaXBib2FyZChtX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkLCBtX3ByaW1hcnlTZWxlY3Rp
b25Pd25lcik7Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZVRv
Q2xpcGJvYXJkKHNlbGVjdGlvbi5zZWxlY3Rpb25EYXRhLCBbdGhpc10gewotICAgICAgICBpZiAo
bV9mcmFtZVdyaXRpbmdUb0NsaXBib2FyZCA9PSBtX3ByaW1hcnlTZWxlY3Rpb25Pd25lcikKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2V0UHJpbWFyeVNlbGVjdGlvbk93bmVyKG51bGxw
dHIpOwotICAgIH0pOworICAgIENsaXBib2FyZDo6Z2V0KHBhc3RlYm9hcmROYW1lKS5mb3JtYXRz
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OnJlYWRGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoV2ViU2VsZWN0aW9uRGF0YSYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkVGV4dChjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJTZWxlY3Rpb25EYXRhKFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkucmVhZEZyb21DbGlwYm9hcmQoKSkpOworICAg
IENsaXBib2FyZDo6Z2V0KHBhc3RlYm9hcmROYW1lKS5yZWFkVGV4dChXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkRmlsZVBhdGhz
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQ2xpcGJvYXJkOjpn
ZXQocGFzdGVib2FyZE5hbWUpLnJlYWRGaWxlUGF0aHMoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEJ1ZmZlcihjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKElQQzo6U2hhcmVkQnVmZmVyRGF0YVJlZmVyZW5jZSYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBDbGlwYm9hcmQ6OmdldChwYXN0ZWJvYXJkTmFtZSkucmVh
ZEJ1ZmZlcihwYXN0ZWJvYXJkVHlwZS51dGY4KCkuZGF0YSgpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVRvQ2xpcGJvYXJk
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFdlYlNlbGVjdGlvbkRhdGEmJiBzZWxlY3Rp
b24pCit7CisgICAgQ2xpcGJvYXJkOjpnZXQocGFzdGVib2FyZE5hbWUpLndyaXRlKFdURk1vdmUo
c2VsZWN0aW9uLnNlbGVjdGlvbkRhdGEpKTsKK30KKwordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6
OmNsZWFyQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7CisgICAgQ2xp
cGJvYXJkOjpnZXQocGFzdGVib2FyZE5hbWUpLmNsZWFyKCk7CiB9CiAKIHZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjpzZXRQcmltYXJ5U2VsZWN0aW9uT3duZXIoV2ViRnJhbWVQcm94eSogZnJhbWUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDIxZjk4N2RjY2FlYi4uNmRi
YzNmY2I5MjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtMjkzLDE3
ICsyOTMsNDkgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnVwZGF0ZVN1cHBvcnRlZFR5
cGVJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYKICNpZiBQTEFURk9STShHVEspCiAv
LyBQYXN0ZWJvYXJkU3RyYXRlZ3kKIAorVmVjdG9yPFN0cmluZz4gV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjp0eXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIFZlY3RvcjxT
dHJpbmc+IHJlc3VsdDsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRU
eXBlcyhwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFR5
cGVzOjpSZXBseShyZXN1bHQpLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkVGV4dEZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRUZXh0KHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6
OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZFRleHQ6OlJlcGx5KHJlc3VsdCksIDApOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
cmVhZEZpbGVQYXRoc0Zyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6UmVhZEZpbGVQYXRocyhwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQ
YXN0ZWJvYXJkUHJveHk6OlJlYWRGaWxlUGF0aHM6OlJlcGx5KHJlc3VsdCksIDApOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6cmVhZEJ1ZmZlckZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKK3sKKworICAgIElQQzo6U2hhcmVkQnVm
ZmVyRGF0YVJlZmVyZW5jZSBkYXRhOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OlJlYWRCdWZmZXIocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6
OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZEJ1ZmZlcjo6UmVwbHkoZGF0YSksIDApOworICAgIHJl
dHVybiBkYXRhLmJ1ZmZlcigpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3Jp
dGVUb0NsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBTZWxlY3Rpb25EYXRh
JiYgc2VsZWN0aW9uRGF0YSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6Oldy
aXRlVG9DbGlwYm9hcmQocGFzdGVib2FyZE5hbWUsIFdlYlNlbGVjdGlvbkRhdGEoc2VsZWN0aW9u
RGF0YSkpLCAwKTsKK30KKwogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9DbGlw
Ym9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU2VsZWN0aW9uRGF0YSYg
c2VsZWN0aW9uKQogewogICAgIFdlYlNlbGVjdGlvbkRhdGEgc2VsZWN0aW9uRGF0YShzZWxlY3Rp
b24pOwogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6V3JpdGVUb0NsaXBib2FyZChw
YXN0ZWJvYXJkTmFtZSwgc2VsZWN0aW9uRGF0YSksIDApOwogfQogCi1SZWY8U2VsZWN0aW9uRGF0
YT4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkRnJvbUNsaXBib2FyZChjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKQordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNsZWFyQ2xpcGJv
YXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgV2ViU2VsZWN0aW9uRGF0
YSBzZWxlY3Rpb247Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZEZy
b21DbGlwYm9hcmQocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpSZWFkRnJvbUNsaXBib2FyZDo6UmVwbHkoc2VsZWN0aW9uKSwgMCk7Ci0gICAgcmV0dXJuIFdU
Rk1vdmUoc2VsZWN0aW9uLnNlbGVjdGlvbkRhdGEpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhc3RlYm9h
cmRQcm94eTo6Q2xlYXJDbGlwYm9hcmQocGFzdGVib2FyZE5hbWUpLCAwKTsKIH0KIAogI2VuZGlm
IC8vIFBMQVRGT1JNKEdUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAppbmRleCAzNWIz
ZjFmOGFhNTkuLjY1ZTEzYzNjYjFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaApA
QCAtNzUsOCArNzUsMTMgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgdXJsU3RyaW5nU3VpdGFibGVG
b3JMb2FkaW5nKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFN0cmluZyYgdGl0bGUpIG92
ZXJyaWRlOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQorICAgIFZlY3RvcjxTdHJpbmc+IHR5
cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOworICAgIFN0cmluZyBy
ZWFkVGV4dEZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJp
ZGU7CisgICAgVmVjdG9yPFN0cmluZz4gcmVhZEZpbGVQYXRoc0Zyb21DbGlwYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gcmVhZEJ1ZmZlckZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCB3cml0ZVRv
Q2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFdlYkNvcmU6OlNl
bGVjdGlvbkRhdGEmKSBvdmVycmlkZTsKLSAgICBSZWY8V2ViQ29yZTo6U2VsZWN0aW9uRGF0YT4g
cmVhZEZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7
CisgICAgdm9pZCB3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUs
IFdlYkNvcmU6OlNlbGVjdGlvbkRhdGEmJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhckNsaXBi
b2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKICNlbmRpZgogI2lm
IFVTRShMSUJXUEUpCiAgICAgdm9pZCBnZXRUeXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMpIG92
ZXJyaWRlOwo=
</data>
<flag name="review"
          id="414429"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399126</attachid>
            <date>2020-05-12 07:16:47 -0700</date>
            <delta_ts>2020-05-12 07:16:47 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wkgtk-clipboard.diff</filename>
            <type>text/plain</type>
            <size>71210</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNDU1MjU1YzM0NjcuLjdmMzhjYzc2YTIyOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDUwIEBACisyMDIwLTA1LTEyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZXdvcmsgY2xpcGJvYXJkIGhhbmRsaW5nIGlu
IHByZXBhcmF0aW9uIGZvciBHVEs0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTE1MTEKKworICAgICAgICBSZXZpZXdlZCBieSBBZHJpYW4gUGVyZXog
ZGUgQ2FzdHJvLgorCisgICAgICAgIFJlbW92ZSBQbGF0Zm9ybVBhc3RlYm9hcmQgaW1wbGVtZW50
YXRpb24gdGhhdCBoYXMgYmVlbiByZXBsYWNlZCBieSBDbGlwYm9hcmQgY2xhc3MgaW4gdGhlIFdl
YktpdAorICAgICAgICBsYXllci4gV2hlbiBQYXN0ZWJvYXJkIGNsYXNzIGlzIGNyZWF0ZWQgZm9y
IGNvcHkgYW5kIHBhc3RlIG9wZXJhdGlvbnMsIGl0IG5vIGxvbmdlciBoYXMgYSBTZWxlY3Rpb25E
YXRhIG1lbWJlciwKKyAgICAgICAgaXQganVzdCB1c2VzIHRoZSBuZXcgbWV0aG9kcyBpbiB0aGUg
cGFzdGVib2FyZCBzdHJhdGVneSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjbGlwYm9hcmQuIFdl
YkNvbnRlbnRSZWFkZXIgaGFzCisgICAgICAgIG5vdyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgR1RL
IGFuZCBpdCdzIHVzZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGNsaXBib2FyZCwgdGhlIHNhbWUg
d2F5IGl0J3MgZG9uZSBpbiBvdGhlciBwb3J0cy4KKworICAgICAgICAqIFNvdXJjZXNHVEsudHh0
OgorICAgICAgICAqIGVkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oOgorICAgICAgICAqIGVkaXRp
bmcvZ3RrL0VkaXRvckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0
aFBhc3RlYm9hcmQpOiBVc2Ugd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKCkuCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCk6IFVzZSBXZWJDb250ZW50
UmVhZGVyLgorICAgICAgICAqIGVkaXRpbmcvZ3RrL1dlYkNvbnRlbnRSZWFkZXJHdGsuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRGaWxlUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZVBhdGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRIVE1MKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNv
bnRlbnRSZWFkZXI6OnJlYWRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29udGVudE1hcmt1
cFJlYWRlcjo6cmVhZEhUTUwpOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50UmVhZGVyOjpyZWFkRGF0YUJ1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpzZWxlY3Rp
b25EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3Rl
Ym9hcmQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVw
bGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmQ6Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjpyZWFkU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmZpbGVD
b250ZW50U3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9QbGF0Zm9ybVBhc3RlYm9hcmRHdGsuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvbkRhdGE6OnNldFVSTCk6IERvIG5vdCBvdmVycmlkZSB0aGUgdGV4dCBhbmQgbWFya3Vw
IGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4gc2V0LgorCiAyMDIwLTA1LTEyICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRyb2R1Y2UgYSBSZWFsdGltZU1lZGlh
U291cmNlIHZpZGVvIHNhbXBsZSBvYnNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCA5NDg0
NDY4MmRmMjAuLmUxNmI3NjNmZjFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
c0dUSy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKQEAgLTQyLDYgKzQy
LDcgQEAgYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCiBlZGl0aW5n
L2F0ay9GcmFtZVNlbGVjdGlvbkF0ay5jcHAKIAogZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAor
ZWRpdGluZy9ndGsvV2ViQ29udGVudFJlYWRlckd0ay5jcHAKIAogbG9hZGVyL3NvdXAvUmVzb3Vy
Y2VMb2FkZXJTb3VwLmNwcAogCkBAIC0xMDgsNyArMTA5LDYgQEAgcGxhdGZvcm0vZ3RrL0xvY2Fs
aXplZFN0cmluZ3NHdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKIHBsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9h
cmRFdmVudEd0ay5jcHAKLXBsYXRmb3JtL2d0ay9QbGF0Zm9ybVBhc3RlYm9hcmRHdGsuY3BwCiBw
bGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1X
aGVlbEV2ZW50R3RrLmNwcAogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5jcHAKaW5kZXggNTAwZmUzYmM0
ZTFiLi40ZGQ2YjhjMjA0NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2Vi
Q29udGVudFJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50
UmVhZGVyLmNwcApAQCAtNTAsNSArNTAsMTggQEAgTVNPTGlzdFF1aXJrcyBGcmFtZVdlYkNvbnRl
bnRSZWFkZXI6Om1zb0xpc3RRdWlya3NGb3JNYXJrdXAoKSBjb25zdAogICAgIHJldHVybiBjb250
ZW50T3JpZ2luLmlzTnVsbCgpID8gTVNPTGlzdFF1aXJrczo6Q2hlY2tJZk5lZWRlZCA6IE1TT0xp
c3RRdWlya3M6OkRpc2FibGVkOwogfQogCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JN
KEdUSykKK2Jvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZEZpbGVQYXRocyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGF0aHMpCit7CisgICAgaWYgKHBhdGhzLmlzRW1wdHkoKSB8fCAhZnJhbWUuZG9j
dW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChhdXRvJiBwYXRoIDog
cGF0aHMpCisgICAgICAgIHJlYWRGaWxlUGF0aChwYXRoKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorI2VuZGlmCisKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJD
b250ZW50UmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIu
aAppbmRleCA1NDU0MWYwYTcyYmIuLjA4YWExMjQyNjYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9XZWJDb250ZW50UmVhZGVyLmgKQEAgLTY4LDE4ICs2OCwyMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhZGRGcmFnbWVudChSZWY8RG9jdW1lbnRGcmFnbWVudD4mJik7CiAKIHByaXZhdGU6Ci0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYm9vbCByZWFkV2ViQXJjaGl2ZShTaGFyZWRCdWZmZXIm
KSBvdmVycmlkZTsKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQogICAgIGJv
b2wgcmVhZEZpbGVQYXRoKGNvbnN0IFN0cmluZyYsIFByZXNlbnRhdGlvblNpemUgcHJlZmVycmVk
UHJlc2VudGF0aW9uU2l6ZSA9IHsgfSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSA9IHsgfSkg
b3ZlcnJpZGU7CiAgICAgYm9vbCByZWFkRmlsZVBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jikg
b3ZlcnJpZGU7CiAgICAgYm9vbCByZWFkSFRNTChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICBib29sIHJlYWRSVEZEKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOwotICAgIGJvb2wgcmVhZFJU
RihTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKICAgICBib29sIHJlYWRJbWFnZShSZWY8U2hhcmVk
QnVmZmVyPiYmLCBjb25zdCBTdHJpbmcmIHR5cGUsIFByZXNlbnRhdGlvblNpemUgcHJlZmVycmVk
UHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkgb3ZlcnJpZGU7CiAgICAgYm9vbCByZWFkVVJMKGNvbnN0
IFVSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOwotICAgIGJvb2wgcmVhZERhdGFC
dWZmZXIoU2hhcmVkQnVmZmVyJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUsIFByZXNlbnRhdGlvblNpemUgcHJlZmVycmVkUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkgb3Zl
cnJpZGU7CiAgICAgYm9vbCByZWFkUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwog
I2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIHJlYWRXZWJBcmNoaXZlKFNo
YXJlZEJ1ZmZlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcmVhZFJURkQoU2hhcmVkQnVmZmVyJikg
b3ZlcnJpZGU7CisgICAgYm9vbCByZWFkUlRGKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOworICAg
IGJvb2wgcmVhZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUsIFByZXNlbnRhdGlvblNpemUgcHJlZmVycmVkUHJlc2VudGF0aW9u
U2l6ZSA9IHsgfSkgb3ZlcnJpZGU7CisjZW5kaWYKIH07CiAKIGNsYXNzIFdlYkNvbnRlbnRNYXJr
dXBSZWFkZXIgZmluYWwgOiBwdWJsaWMgRnJhbWVXZWJDb250ZW50UmVhZGVyIHsKQEAgLTkyLDE4
ICs5NSwyMSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIGJvb2wgcmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CisjaWYg
UExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKICAgICBib29sIHJlYWRGaWxlUGF0aChj
b25zdCBTdHJpbmcmLCBQcmVzZW50YXRpb25TaXplID0geyB9LCBjb25zdCBTdHJpbmcmID0geyB9
KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgcmVhZEZpbGVQYXRocyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBy
ZWFkSFRNTChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBib29sIHJlYWRSVEZEKFNoYXJl
ZEJ1ZmZlciYpIG92ZXJyaWRlOwotICAgIGJvb2wgcmVhZFJURihTaGFyZWRCdWZmZXImKSBvdmVy
cmlkZTsKICAgICBib29sIHJlYWRJbWFnZShSZWY8U2hhcmVkQnVmZmVyPiYmLCBjb25zdCBTdHJp
bmcmLCBQcmVzZW50YXRpb25TaXplID0geyB9KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIGJvb2wgcmVhZFVSTChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQotICAgIGJvb2wgcmVhZERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUHJlc2VudGF0aW9uU2l6ZSA9IHsgfSkgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIHJlYWRQbGFpblRleHQoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgYm9vbCByZWFkV2ViQXJjaGl2ZShTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKKyAg
ICBib29sIHJlYWRSVEZEKFNoYXJlZEJ1ZmZlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcmVhZFJU
RihTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKKyAgICBib29sIHJlYWREYXRhQnVmZmVyKFNoYXJl
ZEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFByZXNlbnRhdGlvblNpemUg
PSB7IH0pIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKIH07CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgZGVmaW5lZChfX09CSkNfXykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggMjg5OWYzNWU4
MDhhLi5kYmFmMWY2ZTYyYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCkBAIC03OTgsMTcgKzc5OCw2IEBAIGJvb2wg
V2ViQ29udGVudFJlYWRlcjo6cmVhZEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgUHJlc2Vu
dGF0aW9uU2l6ZSBwcmVmZXJyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViQ29udGVu
dFJlYWRlcjo6cmVhZEZpbGVQYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0g
ICAgaWYgKHBhdGhzLmlzRW1wdHkoKSB8fCAhZnJhbWUuZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpCi0gICAgICAgIHJlYWRG
aWxlUGF0aChwYXRoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIFdlYkNvbnRlbnRS
ZWFkZXI6OnJlYWRVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAg
ICAgaWYgKHVybC5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2d0ay9FZGl0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3Rr
LmNwcAppbmRleCBkNDFlNGI5MzAyNzYuLmJlZjlmZjYwMDVlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC0yNyw5ICsyNyw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAKLSNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJET01VUkwuaCIKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVt
ZW50LmgiCkBAIC00NCw0OSArNDIsMTIgQEAKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJTZWxlY3Rpb25EYXRhLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJXZWJDb250ZW50UmVhZGVyLmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1
ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPGNhaXJvLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QYXN0
ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRl
eHQpCi17Ci0gICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKLQotICAgIGlmICghcGFzdGVib2Fy
ZC5oYXNEYXRhKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgY29uc3QgYXV0byYg
c2VsZWN0aW9uID0gcGFzdGVib2FyZC5zZWxlY3Rpb25EYXRhKCk7Ci0gICAgaWYgKHNlbGVjdGlv
bi5oYXNJbWFnZSgpKSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAg
IGF1dG8gc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKHNlbGVjdGlv
bi5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBbXSh2b2lkKiBvdXRwdXQsIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpIHsKLSAgICAgICAgICAgIGlmICghcmVp
bnRlcnByZXRfY2FzdDxWZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwg
c2l6ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsK
LSAgICAgICAgICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLSAgICAgICAgfSwgJmJ1
ZmZlcik7Ci0gICAgICAgIGlmIChzdGF0dXMgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAg
ICAgICAgICAgIGF1dG8gYmxvYiA9IEJsb2I6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlciksICJpbWFn
ZS9wbmciKTsKLSAgICAgICAgICAgIGlmICghZnJhbWUuZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZv
ckltYWdlQW5kVVJMKCpmcmFtZS5kb2N1bWVudCgpLCBET01VUkw6OmNyZWF0ZU9iamVjdFVSTCgq
ZnJhbWUuZG9jdW1lbnQoKSwgYmxvYiksIHsgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAoc2VsZWN0aW9uLmhhc01hcmt1cCgpICYmIGZyYW1lLmRvY3VtZW50KCkpCi0gICAgICAgIHJl
dHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50KCksIHNlbGVjdGlv
bi5tYXJrdXAoKSwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250
ZW50KTsKLQotICAgIGlmICghYWxsb3dQbGFpblRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKHNlbGVjdGlvbi5oYXNUZXh0KCkpIHsKLSAgICAgICAgY2hvc2VQbGFpblRl
eHQgPSB0cnVlOwotICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVM
aXZlUmFuZ2UocmFuZ2UpLCBzZWxlY3Rpb24udGV4dCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2Fy
ZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBhc3RlT3B0aW9uPiBvcHRpb25zKQogewogICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CkBAIC05NCw3ICs1NSw3IEBAIHZv
aWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9w
dGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjaG9zZVBs
YWluVGV4dDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSgqcGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUo
KSwgKnJhbmdlLCBvcHRpb25zLmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCks
IGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoKnBhc3RlYm9hcmQsICpyYW5nZSwgb3B0aW9ucy5j
b250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7CiAK
ICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNRdW90
YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpAQCAt
MTU0LDcgKzExNSwxMCBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
UGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIAogUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRv
cjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIGNvbnN0
IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBs
YWluVGV4dCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERhdGEo
cGFzdGVib2FyZCwgKm1fZG9jdW1lbnQuZnJhbWUoKSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQs
IGNob3NlUGxhaW5UZXh0KTsKKyAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcigqbV9kb2N1bWVu
dC5mcmFtZSgpLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCk7CisgICAgcGFzdGVib2FyZC5yZWFk
KHJlYWRlcik7CisgICAgY2hvc2VQbGFpblRleHQgPSByZWFkZXIubWFkZUZyYWdtZW50RnJvbVBs
YWluVGV4dDsKKyAgICByZXR1cm4gV1RGTW92ZShyZWFkZXIuZnJhZ21lbnQpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0
ay9XZWJDb250ZW50UmVhZGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL1dl
YkNvbnRlbnRSZWFkZXJHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uMmUyZTk1Y2RiMGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9ndGsvV2ViQ29udGVudFJlYWRlckd0ay5jcHAKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29u
dGVudFJlYWRlci5oIgorCisjaW5jbHVkZSAiQmxvYlVSTC5oIgorI2luY2x1ZGUgIkRPTVVSTC5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgor
I2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8
d3RmL1VSTC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgV2ViQ29udGVudFJlYWRl
cjo6cmVhZEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCwgUHJlc2VudGF0aW9uU2l6ZSwgY29u
c3QgU3RyaW5nJikKK3sKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgIWZyYW1lLmRvY3VtZW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gbWFya3VwID0gdXJsVG9NYXJr
dXAoVVJMKHsgfSwgcGF0aCksIHBhdGgpOworICAgIGFkZEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgbWFya3VwLCAiZmlsZTovLyIsIERpc2FsbG93
U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZEhUTUwoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7Cisg
ICAgaWYgKGZyYW1lLnNldHRpbmdzKCkucHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMoKSB8fCAhZnJh
bWUuZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYWRkRnJhZ21lbnQo
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBzdHJpbmcsIGVtcHR5
U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCkpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRQbGFpblRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0KQoreworICAgIGlmICghYWxsb3dQbGFpblRleHQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGFkZEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRl
TGl2ZVJhbmdlKGNvbnRleHQpLCB0ZXh0KSk7CisKKyAgICBtYWRlRnJhZ21lbnRGcm9tUGxhaW5U
ZXh0ID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJDb250ZW50UmVhZGVy
OjpyZWFkSW1hZ2UoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgUHJlc2VudGF0aW9uU2l6ZSBwcmVmZXJyZWRQcmVzZW50YXRpb25TaXplKQoreworICAgIEFT
U0VSVChmcmFtZS5kb2N1bWVudCgpKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9ICpmcmFtZS5kb2N1
bWVudCgpOworICAgIGFkZEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VBbmRVUkwoZG9j
dW1lbnQsIERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKGRvY3VtZW50LCBCbG9iOjpjcmVhdGUoYnVm
ZmVyLmdldCgpLCB0eXBlKSksIHByZWZlcnJlZFByZXNlbnRhdGlvblNpemUpKTsKKworICAgIHJl
dHVybiBmcmFnbWVudDsKK30KKworYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkVVJMKGNvbnN0
IFVSTCYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdl
YkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRIVE1MKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkLmgKaW5kZXggMWI4ZWEwNmNiZGM3Li4wMWRiNTk5NTUyMGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKQEAgLTEzNiwxOCArMTM2LDIxIEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgflBhc3RlYm9hcmRXZWJDb250ZW50UmVhZGVyKCkgPSBkZWZhdWx0Owog
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdmlydHVhbCBib29sIHJlYWRXZWJBcmNoaXZlKFNo
YXJlZEJ1ZmZlciYpID0gMDsKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQog
ICAgIHZpcnR1YWwgYm9vbCByZWFkRmlsZVBhdGgoY29uc3QgU3RyaW5nJiwgUHJlc2VudGF0aW9u
U2l6ZSBwcmVmZXJyZWRQcmVzZW50YXRpb25TaXplID0geyB9LCBjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlID0geyB9KSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlYWRGaWxlUGF0aHMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlYWRIVE1MKGNvbnN0IFN0
cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcmVhZFJURkQoU2hhcmVkQnVmZmVyJikgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCByZWFkUlRGKFNoYXJlZEJ1ZmZlciYpID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgcmVhZEltYWdlKFJlZjxTaGFyZWRCdWZmZXI+JiYsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgUHJlc2VudGF0aW9uU2l6ZSBwcmVmZXJyZWRQcmVzZW50YXRpb25TaXplID0geyB9KSA9IDA7
CiAgICAgdmlydHVhbCBib29sIHJlYWRVUkwoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRs
ZSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCByZWFkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImLCBj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgUHJlc2VudGF0aW9uU2l6ZSBw
cmVmZXJyZWRQcmVzZW50YXRpb25TaXplID0geyB9KSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJl
YWRQbGFpblRleHQoY29uc3QgU3RyaW5nJikgPSAwOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJikgPSAw
OworICAgIHZpcnR1YWwgYm9vbCByZWFkUlRGRChTaGFyZWRCdWZmZXImKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHJlYWRSVEYoU2hhcmVkQnVmZmVyJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBy
ZWFkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSwgUHJlc2VudGF0aW9uU2l6ZSBwcmVmZXJyZWRQcmVzZW50YXRpb25TaXplID0g
eyB9KSA9IDA7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBQYXN0ZWJvYXJkUGxhaW5UZXh0IHsKQEAg
LTMxMyw5ICszMTYsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCi0g
ICAgdm9pZCB3cml0ZVRvQ2xpcGJvYXJkKCk7Ci0gICAgdm9pZCByZWFkRnJvbUNsaXBib2FyZCgp
OwotICAgIFJlZjxTZWxlY3Rpb25EYXRhPiBtX3NlbGVjdGlvbkRhdGE7CisgICAgUmVmUHRyPFNl
bGVjdGlvbkRhdGE+IG1fc2VsZWN0aW9uRGF0YTsKICAgICBTdHJpbmcgbV9uYW1lOwogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVn
eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgKaW5kZXgg
YjYzZTM1ZDA5ODFhLi41ZDkxNjRmMTQwOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Bhc3RlYm9hcmRTdHJhdGVneS5oCkBAIC04MSw4ICs4MSwxMyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGNvbnRhaW5zU3RyaW5nU2FmZUZvckRPTVRvUmVhZEZvclR5cGUoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOwogCiAjaWYgUExBVEZPUk0o
R1RLKQorICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHJlYWRUZXh0RnJvbUNsaXBib2Fy
ZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8
U3RyaW5nPiByZWFkRmlsZVBhdGhzRnJvbUNsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8U2hhcmVkQnVmZmVyPiByZWFkQnVmZmVy
RnJvbUNsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb0NsaXBib2FyZChjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBTZWxlY3Rpb25EYXRhJiYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgd3JpdGVUb0NsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBTZWxlY3Rpb25EYXRhJikgPSAwOwotICAgIHZpcnR1YWwgUmVmPFNlbGVjdGlvbkRhdGE+
IHJlYWRGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJDbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkgPSAwOwogI2VuZGlmIC8vIFBMQVRGT1JNKEdUSykKIAogI2lmIFVTRShMSUJXUEUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKaW5kZXggMjA2Nzgy
MDc1ZGZjLi4zM2YxODE1ODk4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UGFzdGVib2FyZEd0ay5jcHAKQEAgLTIzLDEwICsyMywxMiBAQAogI2luY2x1ZGUgIkNvbG9yLmgi
CiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBhc3RlYm9hcmRTdHJhdGVneS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgog
I2luY2x1ZGUgIlNlbGVjdGlvbkRhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvVVJMLmg+CkBAIC02NiwyNiArNjgsMjIgQEAgc3RkOjp1bmlxdWVfcHRy
PFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKGNvbnN0IERyYWdE
YXRhJiBkcmEKICNlbmRpZgogCiBQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKFNlbGVjdGlvbkRhdGEm
IHNlbGVjdGlvbkRhdGEpCi0gICAgOiBtX3NlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSkKKyAg
ICA6IG1fc2VsZWN0aW9uRGF0YSgmc2VsZWN0aW9uRGF0YSkKIHsKIH0KIAogUGFzdGVib2FyZDo6
UGFzdGVib2FyZChjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgOiBtX3NlbGVjdGlvbkRhdGEoU2Vs
ZWN0aW9uRGF0YTo6Y3JlYXRlKCkpCi0gICAgLCBtX25hbWUobmFtZSkKLXsKLX0KLQotUGFzdGVi
b2FyZDo6UGFzdGVib2FyZCgpCi0gICAgOiBtX3NlbGVjdGlvbkRhdGEoU2VsZWN0aW9uRGF0YTo6
Y3JlYXRlKCkpCisgICAgOiBtX25hbWUobmFtZSkKIHsKIH0KIAorUGFzdGVib2FyZDo6UGFzdGVi
b2FyZCgpID0gZGVmYXVsdDsKIFBhc3RlYm9hcmQ6On5QYXN0ZWJvYXJkKCkgPSBkZWZhdWx0Owog
CiBjb25zdCBTZWxlY3Rpb25EYXRhJiBQYXN0ZWJvYXJkOjpzZWxlY3Rpb25EYXRhKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9zZWxlY3Rpb25EYXRhLmdldCgpOworICAgIEFTU0VSVChtX3NlbGVj
dGlvbkRhdGEpOworICAgIHJldHVybiAqbV9zZWxlY3Rpb25EYXRhLmdldCgpOwogfQogCiBzdGF0
aWMgQ2xpcGJvYXJkRGF0YVR5cGUgc2VsZWN0aW9uRGF0YVR5cGVGcm9tSFRNTENsaXBib2FyZFR5
cGUoY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtMTAzLDIzICsxMDEsOSBAQCBzdGF0aWMgQ2xpcGJv
YXJkRGF0YVR5cGUgc2VsZWN0aW9uRGF0YVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoY29uc3Qg
U3RyaW5nJiB0eQogICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVVua25vd247CiB9CiAKLXZv
aWQgUGFzdGVib2FyZDo6d3JpdGVUb0NsaXBib2FyZCgpCi17Ci0gICAgaWYgKG1fbmFtZS5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFtZSwgbV9zZWxlY3Rpb25EYXRh
KTsKLX0KLQotdm9pZCBQYXN0ZWJvYXJkOjpyZWFkRnJvbUNsaXBib2FyZCgpCi17Ci0gICAgaWYg
KG1fbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2VsZWN0aW9uRGF0YSA9
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZEZyb21DbGlw
Ym9hcmQobV9uYW1lKTsKLX0KLQogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyhjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKKyAgICBBU1NFUlQobV9zZWxlY3Rp
b25EYXRhKTsKICAgICBzd2l0Y2ggKHNlbGVjdGlvbkRhdGFUeXBlRnJvbUhUTUxDbGlwYm9hcmRU
eXBlKHR5cGUpKSB7CiAgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6CiAgICAgY2Fz
ZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKQEAgLTEzNywyNiArMTIxLDMzIEBAIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEp
CiAgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUltYWdlOgogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgd3JpdGVUb0NsaXBib2FyZCgpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxh
aW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbGFj
ZU9wdGlvbikKIHsKLSAgICBtX3NlbGVjdGlvbkRhdGEtPmNsZWFyQWxsKCk7Ci0gICAgbV9zZWxl
Y3Rpb25EYXRhLT5zZXRUZXh0KHRleHQpOwotICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0Q2FuU21h
cnRSZXBsYWNlKHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2UpOwotCi0gICAg
d3JpdGVUb0NsaXBib2FyZCgpOworICAgIGlmIChtX3NlbGVjdGlvbkRhdGEpIHsKKyAgICAgICAg
bV9zZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOworICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNl
dFRleHQodGV4dCk7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0Q2FuU21hcnRSZXBsYWNl
KHNtYXJ0UmVwbGFjZU9wdGlvbiA9PSBDYW5TbWFydFJlcGxhY2UpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIFNlbGVjdGlvbkRhdGEgZGF0YTsKKyAgICAgICAgZGF0YS5zZXRUZXh0KHRleHQpOwor
ICAgICAgICBkYXRhLnNldENhblNtYXJ0UmVwbGFjZShzbWFydFJlcGxhY2VPcHRpb24gPT0gQ2Fu
U21hcnRSZXBsYWNlKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFtZSwgV1RGTW92ZShkYXRhKSk7CisgICAg
fQogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRVUkwmIHBhc3Rl
Ym9hcmRVUkwpCiB7CiAgICAgQVNTRVJUKCFwYXN0ZWJvYXJkVVJMLnVybC5pc0VtcHR5KCkpOwot
Ci0gICAgbV9zZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOwotICAgIG1fc2VsZWN0aW9uRGF0YS0+
c2V0VVJMKHBhc3RlYm9hcmRVUkwudXJsLCBwYXN0ZWJvYXJkVVJMLnRpdGxlKTsKLQotICAgIHdy
aXRlVG9DbGlwYm9hcmQoKTsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIG1f
c2VsZWN0aW9uRGF0YS0+Y2xlYXJBbGwoKTsKKyAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRV
UkwocGFzdGVib2FyZFVSTC51cmwsIHBhc3RlYm9hcmRVUkwudGl0bGUpOworICAgIH0gZWxzZSB7
CisgICAgICAgIFNlbGVjdGlvbkRhdGEgZGF0YTsKKyAgICAgICAgZGF0YS5zZXRVUkwocGFzdGVi
b2FyZFVSTC51cmwsIHBhc3RlYm9hcmRVUkwudGl0bGUpOworICAgICAgICBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9DbGlwYm9hcmQobV9uYW1lLCBX
VEZNb3ZlKGRhdGEpKTsKKyAgICB9CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVUcnVzdHdv
cnRoeVdlYlVSTHNQYm9hcmRUeXBlKGNvbnN0IFBhc3RlYm9hcmRVUkwmKQpAQCAtMTY2LDM4ICsx
NTcsNTcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVRydXN0d29ydGh5V2ViVVJMc1Bib2FyZFR5
cGUoY29uc3QgUGFzdGVib2FyZFVSTCYpCiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGUoY29uc3Qg
UGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpCiB7Ci0gICAgbV9zZWxlY3Rpb25EYXRh
LT5jbGVhckFsbCgpOwotICAgIGlmICghcGFzdGVib2FyZEltYWdlLnVybC51cmwuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0VVJMKHBhc3RlYm9hcmRJbWFnZS51cmwu
dXJsLCBwYXN0ZWJvYXJkSW1hZ2UudXJsLnRpdGxlKTsKLSAgICAgICAgbV9zZWxlY3Rpb25EYXRh
LT5zZXRNYXJrdXAocGFzdGVib2FyZEltYWdlLnVybC5tYXJrdXApOworICAgIGlmIChtX3NlbGVj
dGlvbkRhdGEpIHsKKyAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5jbGVhckFsbCgpOworICAgICAg
ICBpZiAoIXBhc3RlYm9hcmRJbWFnZS51cmwudXJsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
bV9zZWxlY3Rpb25EYXRhLT5zZXRVUkwocGFzdGVib2FyZEltYWdlLnVybC51cmwsIHBhc3RlYm9h
cmRJbWFnZS51cmwudGl0bGUpOworICAgICAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRNYXJr
dXAocGFzdGVib2FyZEltYWdlLnVybC5tYXJrdXApOworICAgICAgICB9CisgICAgICAgIG1fc2Vs
ZWN0aW9uRGF0YS0+c2V0SW1hZ2UocGFzdGVib2FyZEltYWdlLmltYWdlLmdldCgpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBTZWxlY3Rpb25EYXRhIGRhdGE7CisgICAgICAgIGlmICghcGFzdGVi
b2FyZEltYWdlLnVybC51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBkYXRhLnNldFVSTChw
YXN0ZWJvYXJkSW1hZ2UudXJsLnVybCwgcGFzdGVib2FyZEltYWdlLnVybC50aXRsZSk7CisgICAg
ICAgICAgICBkYXRhLnNldE1hcmt1cChwYXN0ZWJvYXJkSW1hZ2UudXJsLm1hcmt1cCk7CisgICAg
ICAgIH0KKyAgICAgICAgZGF0YS5zZXRJbWFnZShwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UuZ2V0KCkp
OworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndy
aXRlVG9DbGlwYm9hcmQobV9uYW1lLCBXVEZNb3ZlKGRhdGEpKTsKICAgICB9Ci0gICAgbV9zZWxl
Y3Rpb25EYXRhLT5zZXRJbWFnZShwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UuZ2V0KCkpOwotCi0gICAg
d3JpdGVUb0NsaXBib2FyZCgpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBh
c3RlYm9hcmRXZWJDb250ZW50JiBwYXN0ZWJvYXJkQ29udGVudCkKIHsKLSAgICBtX3NlbGVjdGlv
bkRhdGEtPmNsZWFyQWxsKCk7Ci0gICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRUZXh0KHBhc3RlYm9h
cmRDb250ZW50LnRleHQpOwotICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0TWFya3VwKHBhc3RlYm9h
cmRDb250ZW50Lm1hcmt1cCk7Ci0gICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRDYW5TbWFydFJlcGxh
Y2UocGFzdGVib2FyZENvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUpOwotCi0gICAgd3JpdGVU
b0NsaXBib2FyZCgpOworICAgIGlmIChtX3NlbGVjdGlvbkRhdGEpIHsKKyAgICAgICAgbV9zZWxl
Y3Rpb25EYXRhLT5jbGVhckFsbCgpOworICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldFRleHQo
cGFzdGVib2FyZENvbnRlbnQudGV4dCk7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0TWFy
a3VwKHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCk7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+
c2V0Q2FuU21hcnRSZXBsYWNlKHBhc3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRl
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBTZWxlY3Rpb25EYXRhIGRhdGE7CisgICAgICAgIGRh
dGEuc2V0VGV4dChwYXN0ZWJvYXJkQ29udGVudC50ZXh0KTsKKyAgICAgICAgZGF0YS5zZXRNYXJr
dXAocGFzdGVib2FyZENvbnRlbnQubWFya3VwKTsKKyAgICAgICAgZGF0YS5zZXRDYW5TbWFydFJl
cGxhY2UocGFzdGVib2FyZENvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUpOworICAgICAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9DbGlwYm9h
cmQobV9uYW1lLCBXVEZNb3ZlKGRhdGEpKTsKKyAgICB9CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6
Y2xlYXIoKQogeworICAgIGlmICghbV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2xlYXJDbGlwYm9hcmQobV9uYW1l
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIFdlIGRvIG5vdCBjbGVhciBmaWxl
bmFtZXMuIEFjY29yZGluZyB0byB0aGUgc3BlYzogIlRoZSBjbGVhckRhdGEoKSBtZXRob2QKICAg
ICAvLyBkb2VzIG5vdCBhZmZlY3Qgd2hldGhlciBhbnkgZmlsZXMgd2VyZSBpbmNsdWRlZCBpbiB0
aGUgZHJhZywgc28gdGhlIHR5cGVzCiAgICAgLy8gYXR0cmlidXRlJ3MgbGlzdCBtaWdodCBzdGls
bCBub3QgYmUgZW1wdHkgYWZ0ZXIgY2FsbGluZyBjbGVhckRhdGEoKSAoaXQgd291bGQKICAgICAv
LyBzdGlsbCBjb250YWluIHRoZSAiRmlsZXMiIHN0cmluZyBpZiBhbnkgZmlsZXMgd2VyZSBpbmNs
dWRlZCBpbiB0aGUgZHJhZykuIgogICAgIG1fc2VsZWN0aW9uRGF0YS0+Y2xlYXJBbGxFeGNlcHRG
aWxlbmFtZXMoKTsKLSAgICB3cml0ZVRvQ2xpcGJvYXJkKCk7CiB9CiAKIHZvaWQgUGFzdGVib2Fy
ZDo6Y2xlYXIoY29uc3QgU3RyaW5nJiB0eXBlKQogeworICAgIEFTU0VSVChtX3NlbGVjdGlvbkRh
dGEpOwogICAgIHN3aXRjaCAoc2VsZWN0aW9uRGF0YVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUo
dHlwZSkpIHsKICAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDoKICAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlVVJMOgpAQCAtMjE2LDE0ICsyMjYsMTMgQEAgdm9pZCBQYXN0ZWJvYXJk
OjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+Y2xl
YXJBbGwoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgd3JpdGVUb0NsaXBib2FyZCgp
OwogfQogCiBib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCiB7Ci0gICAgcmVhZEZy
b21DbGlwYm9hcmQoKTsKLSAgICByZXR1cm4gbV9zZWxlY3Rpb25EYXRhLT5jYW5TbWFydFJlcGxh
Y2UoKTsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKQorICAgICAgICByZXR1cm4gbV9zZWxlY3Rp
b25EYXRhLT5jYW5TbWFydFJlcGxhY2UoKTsKKyAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBlcyhtX25hbWUpLmNvbnRhaW5zKCJhcHBsaWNh
dGlvbi92bmQud2Via2l0Z3RrLnNtYXJ0cGFzdGUiX3MpOwogfQogCiAjaWYgRU5BQkxFKERSQUdf
U1VQUE9SVCkKQEAgLTIzNCwyNSArMjQzLDcxIEBAIHZvaWQgUGFzdGVib2FyZDo6c2V0RHJhZ0lt
YWdlKERyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmKQogCiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQo
UGFzdGVib2FyZFBsYWluVGV4dCYgdGV4dCwgUGxhaW5UZXh0VVJMUmVhZGluZ1BvbGljeSwgT3B0
aW9uYWw8c2l6ZV90PikKIHsKLSAgICByZWFkRnJvbUNsaXBib2FyZCgpOwotICAgIHRleHQudGV4
dCA9IG1fc2VsZWN0aW9uRGF0YS0+dGV4dCgpOworICAgIHRleHQudGV4dCA9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZFRleHRGcm9tQ2xpcGJvYXJkKG1f
bmFtZSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkV2ViQ29udGVudFJl
YWRlciYsIFdlYkNvbnRlbnRSZWFkaW5nUG9saWN5LCBPcHRpb25hbDxzaXplX3Q+KQordm9pZCBQ
YXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRXZWJDb250ZW50UmVhZGVyJiByZWFkZXIsIFdlYkNv
bnRlbnRSZWFkaW5nUG9saWN5IHBvbGljeSwgT3B0aW9uYWw8c2l6ZV90PikKIHsKKyAgICBpZiAo
bV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIGlmIChtX3NlbGVjdGlvbkRhdGEtPmhhc01hcmt1
cCgpICYmIHJlYWRlci5yZWFkSFRNTChtX3NlbGVjdGlvbkRhdGEtPm1hcmt1cCgpKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocG9saWN5ID09IFdlYkNvbnRlbnRSZWFkaW5n
UG9saWN5OjpPbmx5UmljaFRleHRUeXBlcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpZiAobV9zZWxlY3Rpb25EYXRhLT5oYXNGaWxlbmFtZXMoKSAmJiByZWFkZXIucmVhZEZpbGVQ
YXRocyhtX3NlbGVjdGlvbkRhdGEtPmZpbGVuYW1lcygpKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAobV9zZWxlY3Rpb25EYXRhLT5oYXNUZXh0KCkgJiYgcmVhZGVyLnJlYWRQ
bGFpblRleHQobV9zZWxlY3Rpb25EYXRhLT50ZXh0KCkpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHR5cGVzID0gcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBlcyhtX25hbWUpOworICAgIGlmICh0
eXBlcy5jb250YWlucygidGV4dC9odG1sIl9zKSkgeworICAgICAgICBhdXRvIGJ1ZmZlciA9IHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZEJ1ZmZlckZyb21D
bGlwYm9hcmQobV9uYW1lLCAidGV4dC9odG1sIl9zKTsKKyAgICAgICAgaWYgKGJ1ZmZlciAmJiBy
ZWFkZXIucmVhZEhUTUwoU3RyaW5nOjpmcm9tVVRGOChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5z
aXplKCkpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocG9saWN5ID09
IFdlYkNvbnRlbnRSZWFkaW5nUG9saWN5OjpPbmx5UmljaFRleHRUeXBlcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBpbWFnZVR5cGVzW10gPSB7ICJp
bWFnZS9wbmciX3MsICJpbWFnZS9qcGVnIl9zLCAiaW1hZ2UvZ2lmIl9zLCAiaW1hZ2UvYm1wIl9z
LCAiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIl9zLCAiaW1hZ2UveC1pY29uIl9zIH07CisgICAg
Zm9yIChjb25zdCBhdXRvJiBpbWFnZVR5cGUgOiBpbWFnZVR5cGVzKSB7CisgICAgICAgIGlmICh0
eXBlcy5jb250YWlucyhpbWFnZVR5cGUpKSB7CisgICAgICAgICAgICBhdXRvIGJ1ZmZlciA9IHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZEJ1ZmZlckZyb21D
bGlwYm9hcmQobV9uYW1lLCBpbWFnZVR5cGUpOworICAgICAgICAgICAgaWYgKCFidWZmZXItPmlz
RW1wdHkoKSAmJiByZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBpbWFn
ZVR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICh0eXBlcy5jb250YWlucygidGV4dC91cmktbGlzdCJfcykpIHsKKyAgICAgICAgYXV0byBm
aWxlUGF0aHMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJl
YWRGaWxlUGF0aHNGcm9tQ2xpcGJvYXJkKG1fbmFtZSk7CisgICAgICAgIGlmIChyZWFkZXIucmVh
ZEZpbGVQYXRocyhmaWxlUGF0aHMpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICh0eXBlcy5jb250YWlucygidGV4dC9wbGFpbiJfcykgfHwgdHlwZXMuY29udGFpbnMoInRl
eHQvcGxhaW47Y2hhcnNldD11dGYtOCJfcykpIHsKKyAgICAgICAgYXV0byB0ZXh0ID0gcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5yZWFkVGV4dEZyb21DbGlwYm9h
cmQobV9uYW1lKTsKKyAgICAgICAgaWYgKCF0ZXh0LmlzTnVsbCgpICYmIHJlYWRlci5yZWFkUGxh
aW5UZXh0KHRleHQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogdm9pZCBQYXN0
ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyJiByZWFkZXIpCiB7Ci0gICAgcmVhZEZy
b21DbGlwYm9hcmQoKTsKLSAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogbV9zZWxlY3Rpb25EYXRh
LT5maWxlbmFtZXMoKSkKLSAgICAgICAgcmVhZGVyLnJlYWRGaWxlbmFtZShmaWxlbmFtZSk7Cisg
ICAgYXV0byBmaWxlUGF0aHMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPnJlYWRGaWxlUGF0aHNGcm9tQ2xpcGJvYXJkKG1fbmFtZSk7CisgICAgZm9yIChjb25z
dCBhdXRvJiBmaWxlUGF0aCA6IGZpbGVQYXRocykKKyAgICAgICAgcmVhZGVyLnJlYWRGaWxlbmFt
ZShmaWxlUGF0aCk7CiB9CiAKIGJvb2wgUGFzdGVib2FyZDo6aGFzRGF0YSgpCiB7Ci0gICAgcmVh
ZEZyb21DbGlwYm9hcmQoKTsKLSAgICByZXR1cm4gbV9zZWxlY3Rpb25EYXRhLT5oYXNUZXh0KCkg
fHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNNYXJrdXAoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc1VS
SUxpc3QoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc0ltYWdlKCkgfHwgbV9zZWxlY3Rpb25EYXRh
LT5oYXNVbmtub3duVHlwZURhdGEoKTsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhKQorICAgICAg
ICByZXR1cm4gbV9zZWxlY3Rpb25EYXRhLT5oYXNUZXh0KCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5o
YXNNYXJrdXAoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc1VSSUxpc3QoKSB8fCBtX3NlbGVjdGlv
bkRhdGEtPmhhc0ltYWdlKCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNVbmtub3duVHlwZURhdGEo
KTsKKyAgICByZXR1cm4gIXBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+dHlwZXMobV9uYW1lKS5pc0VtcHR5KCk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9h
cmQ6OnR5cGVzU2FmZUZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYpCkBAIC0yNjMsNyArMzE4LDgg
QEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MoY29uc3Qg
U3RyaW5nJikKIAogVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNh
ZmVCaW5kaW5ncygpCiB7Ci0gICAgcmVhZEZyb21DbGlwYm9hcmQoKTsKKyAgICBpZiAoIW1fc2Vs
ZWN0aW9uRGF0YSkKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKS0+dHlwZXMobV9uYW1lKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
OwogICAgIGlmIChtX3NlbGVjdGlvbkRhdGEtPmhhc1RleHQoKSkgewpAQCAtMjk0LDcgKzM1MCwx
MyBAQCBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZE9yaWdpbigpCiAKIFN0cmluZyBQYXN0ZWJvYXJk
OjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICByZWFkRnJvbUNsaXBib2Fy
ZCgpOworICAgIGlmICghbV9zZWxlY3Rpb25EYXRhKSB7CisgICAgICAgIGlmICh0eXBlLnN0YXJ0
c1dpdGgoInRleHQvcGxhaW4iKSkKKyAgICAgICAgICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRUZXh0RnJvbUNsaXBib2FyZChtX25hbWUp
OworCisgICAgICAgIGF1dG8gYnVmZmVyID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT5yZWFkQnVmZmVyRnJvbUNsaXBib2FyZChtX25hbWUsIHR5cGUpOworICAg
ICAgICByZXR1cm4gYnVmZmVyID8gU3RyaW5nOjpmcm9tVVRGOChidWZmZXItPmRhdGEoKSwgYnVm
ZmVyLT5zaXplKCkpIDogU3RyaW5nKCk7CisgICAgfQogCiAgICAgc3dpdGNoIChzZWxlY3Rpb25E
YXRhVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlKSkgewogICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVVUklMaXN0OgpAQCAtMzExLDcgKzM3Myw3IEBAIFN0cmluZyBQYXN0ZWJvYXJkOjpy
ZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiB7IH07CiB9CiAKIFN0cmluZyBQYXN0ZWJv
YXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYpCkBAIC0zMjIsOCArMzg0
LDE3IEBAIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0
cmluZyYpCiAKIFBhc3RlYm9hcmQ6OkZpbGVDb250ZW50U3RhdGUgUGFzdGVib2FyZDo6ZmlsZUNv
bnRlbnRTdGF0ZSgpCiB7Ci0gICAgcmVhZEZyb21DbGlwYm9hcmQoKTsKLSAgICByZXR1cm4gbV9z
ZWxlY3Rpb25EYXRhLT5maWxlbmFtZXMoKS5pc0VtcHR5KCkgPyBGaWxlQ29udGVudFN0YXRlOjpO
b0ZpbGVPckltYWdlRGF0YSA6IEZpbGVDb250ZW50U3RhdGU6Ok1heUNvbnRhaW5GaWxlUGF0aHM7
CisgICAgaWYgKG1fc2VsZWN0aW9uRGF0YSkKKyAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0
YS0+ZmlsZW5hbWVzKCkuaXNFbXB0eSgpID8gRmlsZUNvbnRlbnRTdGF0ZTo6Tm9GaWxlT3JJbWFn
ZURhdGEgOiBGaWxlQ29udGVudFN0YXRlOjpNYXlDb250YWluRmlsZVBhdGhzOworCisgICAgYXV0
byB0eXBlcyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+dHlw
ZXMobV9uYW1lKTsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoInRleHQvdXJpLWxpc3QiX3MpKQor
ICAgICAgICByZXR1cm4gRmlsZUNvbnRlbnRTdGF0ZTo6TWF5Q29udGFpbkZpbGVQYXRoczsKKwor
ICAgIGF1dG8gcmVzdWx0ID0gdHlwZXMuZmluZE1hdGNoaW5nKFtdKGNvbnN0IFN0cmluZyYgdHlw
ZSkgeworICAgICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlKHR5cGUpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQgPT0gbm90Rm91bmQgPyBG
aWxlQ29udGVudFN0YXRlOjpOb0ZpbGVPckltYWdlRGF0YSA6IEZpbGVDb250ZW50U3RhdGU6Ok1h
eUNvbnRhaW5GaWxlUGF0aHM7CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVNYXJrdXAoY29u
c3QgU3RyaW5nJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJk
SGVscGVyLmNwcAppbmRleCA1NzQ5NjZhNTlmYmYuLjUxYzhkOThkMjhjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcApAQCAtMjgsNyAr
MjgsNiBAQAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uRGF0
YS5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4K
ICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCkBAIC05Niw0MSArOTUsNiBAQCBzdGF0aWMgU3RyaW5nIHNlbGVjdGlvbkRhdGFU
b1VURjhTdHJpbmcoR3RrU2VsZWN0aW9uRGF0YSogZGF0YSkKICAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOChtYXJrdXBTdHJpbmcuZ2V0KCkpOwogfQogCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6
OmdldENsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBTZWxlY3Rpb25E
YXRhJiBzZWxlY3Rpb24pCi17Ci0gICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190ZXh0X2F2
YWlsYWJsZShjbGlwYm9hcmQpKSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHRleHREYXRh
KGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dChjbGlwYm9hcmQpKTsKLSAgICAgICAgaWYgKHRl
eHREYXRhKQotICAgICAgICAgICAgc2VsZWN0aW9uLnNldFRleHQoU3RyaW5nOjpmcm9tVVRGOCh0
ZXh0RGF0YS5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNf
dGFyZ2V0X2F2YWlsYWJsZShjbGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7Ci0gICAgICAgIGlmIChH
dGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhj
bGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWFya3VwKHNlbGVj
dGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwotICAgICAgICAgICAgcmVtb3ZlTWFya3VwUHJl
Zml4KG1hcmt1cCk7Ci0gICAgICAgICAgICBzZWxlY3Rpb24uc2V0TWFya3VwKG1hcmt1cCk7Ci0g
ICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfZnJlZShkYXRhKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChndGtfY2xpcGJvYXJkX3dhaXRfaXNfdGFyZ2V0X2F2YWlsYWJsZShjbGlw
Ym9hcmQsIHVyaUxpc3RBdG9tKSkgewotICAgICAgICBpZiAoR3RrU2VsZWN0aW9uRGF0YSogZGF0
YSA9IGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfY29udGVudHMoY2xpcGJvYXJkLCB1cmlMaXN0QXRv
bSkpIHsKLSAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRVUklMaXN0KHNlbGVjdGlvbkRhdGFUb1VU
RjhTdHJpbmcoZGF0YSkpOwotICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2ZyZWUoZGF0
YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX2lt
YWdlX2F2YWlsYWJsZShjbGlwYm9hcmQpKSB7Ci0gICAgICAgIGlmIChHUmVmUHRyPEdka1BpeGJ1
Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGd0a19jbGlwYm9hcmRfd2FpdF9mb3JfaW1hZ2UoY2xpcGJv
YXJkKSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBh
ZG9wdFJlZihnZGtfY2Fpcm9fc3VyZmFjZV9jcmVhdGVfZnJvbV9waXhidWYocGl4YnVmLmdldCgp
LCAxLCBudWxscHRyKSk7Ci0gICAgICAgICAgICBSZWY8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1h
Z2U6OmNyZWF0ZShXVEZNb3ZlKHN1cmZhY2UpKTsKLSAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRJ
bWFnZShpbWFnZS5wdHIoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzZWxlY3Rpb24uc2V0
Q2FuU21hcnRSZXBsYWNlKGd0a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNs
aXBib2FyZCwgc21hcnRQYXN0ZUF0b20pKTsKLX0KLQogR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBQ
YXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yU2VsZWN0aW9uRGF0YShjb25zdCBTZWxlY3Rp
b25EYXRhJiBzZWxlY3Rpb24pCiB7CiAgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0g
YWRvcHRHUmVmKGd0a190YXJnZXRfbGlzdF9uZXcobnVsbHB0ciwgMCkpOwpAQCAtMjY1LDU3ICsy
MjksNiBAQCBWZWN0b3I8R2RrQXRvbT4gUGFzdGVib2FyZEhlbHBlcjo6ZHJvcEF0b21zRm9yQ29u
dGV4dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZwogICAgIHJldHVybiBkcm9wQXRvbXM7CiB9
CiAKLXN0YXRpYyBTZWxlY3Rpb25EYXRhKiBzZXR0aW5nQ2xpcGJvYXJkU2VsZWN0aW9uOwotCi1z
dHJ1Y3QgQ2xpcGJvYXJkU2V0RGF0YSB7Ci0gICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEOwotICAgIENsaXBib2FyZFNldERhdGEoU2VsZWN0aW9uRGF0YSYgc2VsZWN0aW9uLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJiBzZWxlY3Rpb25DbGVhcmVkQ2FsbGJhY2spCi0gICAgICAgIDog
c2VsZWN0aW9uRGF0YShzZWxlY3Rpb24pCi0gICAgICAgICwgc2VsZWN0aW9uQ2xlYXJlZENhbGxi
YWNrKFdURk1vdmUoc2VsZWN0aW9uQ2xlYXJlZENhbGxiYWNrKSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgfkNsaXBib2FyZFNldERhdGEoKSA9IGRlZmF1bHQ7Ci0KLSAgICBSZWY8U2VsZWN0aW9uRGF0
YT4gc2VsZWN0aW9uRGF0YTsKLSAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4gc2VsZWN0aW9uQ2xl
YXJlZENhbGxiYWNrOwotfTsKLQotc3RhdGljIHZvaWQgZ2V0Q2xpcGJvYXJkQ29udGVudHNDYWxs
YmFjayhHdGtDbGlwYm9hcmQqLCBHdGtTZWxlY3Rpb25EYXRhICpzZWxlY3Rpb25EYXRhLCBndWlu
dCBpbmZvLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nh
c3Q8Q2xpcGJvYXJkU2V0RGF0YSo+KHVzZXJEYXRhKTsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpz
aW5nbGV0b24oKS5maWxsU2VsZWN0aW9uRGF0YShkYXRhLT5zZWxlY3Rpb25EYXRhLCBpbmZvLCBz
ZWxlY3Rpb25EYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJDbGlwYm9hcmRDb250ZW50c0Nh
bGxiYWNrKEd0a0NsaXBib2FyZCosIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDbGlwYm9hcmRTZXREYXRhPiBkYXRhKHN0YXRpY19jYXN0PENsaXBib2FyZFNldERh
dGEqPih1c2VyRGF0YSkpOwotICAgIGlmIChkYXRhLT5zZWxlY3Rpb25DbGVhcmVkQ2FsbGJhY2sp
Ci0gICAgICAgIGRhdGEtPnNlbGVjdGlvbkNsZWFyZWRDYWxsYmFjaygpOwotfQotCi12b2lkIFBh
c3RlYm9hcmRIZWxwZXI6OndyaXRlQ2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQsIGNvbnN0IFNlbGVjdGlvbkRhdGEmIHNlbGVjdGlvbiwgV1RGOjpGdW5jdGlvbjx2b2lk
KCk+JiYgcHJpbWFyeVNlbGVjdGlvbkNsZWFyZWQpCi17Ci0gICAgR1JlZlB0cjxHdGtUYXJnZXRM
aXN0PiBsaXN0ID0gdGFyZ2V0TGlzdEZvclNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uKTsKLQotICAg
IGludCBudW1iZXJPZlRhcmdldHM7Ci0gICAgR3RrVGFyZ2V0RW50cnkqIHRhYmxlID0gZ3RrX3Rh
cmdldF90YWJsZV9uZXdfZnJvbV9saXN0KGxpc3QuZ2V0KCksICZudW1iZXJPZlRhcmdldHMpOwot
Ci0gICAgaWYgKG51bWJlck9mVGFyZ2V0cyA+IDAgJiYgdGFibGUpIHsKLSAgICAgICAgU2V0Rm9y
U2NvcGU8U2VsZWN0aW9uRGF0YSo+IGNoYW5nZShzZXR0aW5nQ2xpcGJvYXJkU2VsZWN0aW9uLCBj
b25zdF9jYXN0PFNlbGVjdGlvbkRhdGEqPigmc2VsZWN0aW9uKSk7Ci0gICAgICAgIGF1dG8gZGF0
YSA9IG1ha2VVbmlxdWU8Q2xpcGJvYXJkU2V0RGF0YT4oKnNldHRpbmdDbGlwYm9hcmRTZWxlY3Rp
b24sIFdURk1vdmUocHJpbWFyeVNlbGVjdGlvbkNsZWFyZWQpKTsKLSAgICAgICAgaWYgKGd0a19j
bGlwYm9hcmRfc2V0X3dpdGhfZGF0YShjbGlwYm9hcmQsIHRhYmxlLCBudW1iZXJPZlRhcmdldHMs
IGdldENsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2ssIGNsZWFyQ2xpcGJvYXJkQ29udGVudHNDYWxs
YmFjaywgZGF0YS5nZXQoKSkpIHsKLSAgICAgICAgICAgIGd0a19jbGlwYm9hcmRfc2V0X2Nhbl9z
dG9yZShjbGlwYm9hcmQsIG51bGxwdHIsIDApOwotICAgICAgICAgICAgLy8gV2hlbiBndGtfY2xp
cGJvYXJkX3NldF93aXRoX2RhdGEoKSBzdWNjZWVkcyBjbGVhckNsaXBib2FyZENvbnRlbnRzQ2Fs
bGJhY2sgdGFrZXMgdGhlIG93bmVyc2hpcCBvZiBkYXRhLCBzbyB3ZSBsZWFrIGl0IGhlcmUuCi0g
ICAgICAgICAgICBkYXRhLnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAg
ICBndGtfY2xpcGJvYXJkX2NsZWFyKGNsaXBib2FyZCk7Ci0KLSAgICBpZiAodGFibGUpCi0gICAg
ICAgIGd0a190YXJnZXRfdGFibGVfZnJlZSh0YWJsZSwgbnVtYmVyT2ZUYXJnZXRzKTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gIVVTRShHVEs0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKaW5kZXggNGMzZjQ1MTA4
MWU2Li41NTliNjY3MGUwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9QYXN0ZWJvYXJkSGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRIZWxwZXIuaApAQCAtNDAsMTUgKzQwLDExIEBAIGNsYXNzIFBhc3RlYm9hcmRIZWxw
ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXN0ZWJvYXJkSGVscGVyJiBzaW5nbGV0b24oKTsK
IAotICAgIGVudW0gU21hcnRQYXN0ZUluY2x1c2lvbiB7IEluY2x1ZGVTbWFydFBhc3RlLCBEb05v
dEluY2x1ZGVTbWFydFBhc3RlIH07Ci0KICAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0KCkg
Y29uc3Q7CiAgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiB0YXJnZXRMaXN0Rm9yU2VsZWN0aW9u
RGF0YShjb25zdCBTZWxlY3Rpb25EYXRhJik7CiAgICAgdm9pZCBmaWxsU2VsZWN0aW9uRGF0YShj
b25zdCBTZWxlY3Rpb25EYXRhJiwgdW5zaWduZWQsIEd0a1NlbGVjdGlvbkRhdGEqKTsKICAgICB2
b2lkIGZpbGxTZWxlY3Rpb25EYXRhKEd0a1NlbGVjdGlvbkRhdGEqLCB1bnNpZ25lZCwgU2VsZWN0
aW9uRGF0YSYpOwogICAgIFZlY3RvcjxHZGtBdG9tPiBkcm9wQXRvbXNGb3JDb250ZXh0KEd0a1dp
ZGdldCosIEdka0RyYWdDb250ZXh0Kik7Ci0gICAgdm9pZCB3cml0ZUNsaXBib2FyZENvbnRlbnRz
KEd0a0NsaXBib2FyZCosIGNvbnN0IFNlbGVjdGlvbkRhdGEmLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJiBwcmltYXJ5U2VsZWN0aW9uQ2xlYXJlZCA9IG51bGxwdHIpOwotICAgIHZvaWQgZ2V0Q2xp
cGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiwgU2VsZWN0aW9uRGF0YSYpOwogCiAgICAgZW51
bSBQYXN0ZWJvYXJkVGFyZ2V0VHlwZSB7IFRhcmdldFR5cGVNYXJrdXAsIFRhcmdldFR5cGVUZXh0
LCBUYXJnZXRUeXBlSW1hZ2UsIFRhcmdldFR5cGVVUklMaXN0LCBUYXJnZXRUeXBlTmV0c2NhcGVV
UkwsIFRhcmdldFR5cGVTbWFydFBhc3RlLCBUYXJnZXRUeXBlVW5rbm93biB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJkR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVBhc3RlYm9hcmRHdGsuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzk3ZTlmZjNmYzAuLjAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJkR3Rr
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDE2IFJlZCBIYXQgSW5jLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUGFzdGVib2FyZC5oIgotCi0jaW5j
bHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCi0jaW5jbHVkZSAi
U2VsZWN0aW9uRGF0YS5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPGd0
ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
I2lmIFVTRShHVEs0KQotUGxhdGZvcm1QYXN0ZWJvYXJkOjpQbGF0Zm9ybVBhc3RlYm9hcmQoY29u
c3QgU3RyaW5nJikKLXsKLX0KLSNlbHNlCi1QbGF0Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3JtUGFz
dGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQotICAgIDogbV9jbGlwYm9hcmQo
Z3RrX2NsaXBib2FyZF9nZXQoZ2RrX2F0b21faW50ZXJuKHBhc3RlYm9hcmROYW1lLnV0ZjgoKS5k
YXRhKCksIFRSVUUpKSkKLXsKLSAgICBBU1NFUlQobV9jbGlwYm9hcmQpOwotfQotI2VuZGlmCi0K
LXZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFNlbGVjdGlv
bkRhdGEmIHNlbGVjdGlvbiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgcHJpbWFyeVNlbGVjdGlv
bkNsZWFyZWQpCi17Ci0jaWYgIVVTRShHVEs0KQotICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmds
ZXRvbigpLndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQsIHNlbGVjdGlvbiwgZ3Rr
X2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9QUklNQVJZKSA9PSBtX2NsaXBib2FyZCA/IFdU
Rk1vdmUocHJpbWFyeVNlbGVjdGlvbkNsZWFyZWQpIDogbnVsbHB0cik7Ci0jZW5kaWYKLX0KLQot
UmVmPFNlbGVjdGlvbkRhdGE+IFBsYXRmb3JtUGFzdGVib2FyZDo6cmVhZEZyb21DbGlwYm9hcmQo
KQotewotICAgIFJlZjxTZWxlY3Rpb25EYXRhPiBzZWxlY3Rpb24oU2VsZWN0aW9uRGF0YTo6Y3Jl
YXRlKCkpOwotI2lmICFVU0UoR1RLNCkKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24o
KS5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCwgc2VsZWN0aW9uLmdldCgpKTsKLSNl
bmRpZgotICAgIHJldHVybiBzZWxlY3Rpb247Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFBsYXRmb3Jt
UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJikg
Y29uc3QKLXsKLSAgICByZXR1cm4geyB9OwotfQotCi1pbnQ2NF90IFBsYXRmb3JtUGFzdGVib2Fy
ZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmKQotewotICAgIHJldHVybiAwOwot
fQotCi1pbnQ2NF90IFBsYXRmb3JtUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgVmVjdG9yPFBhc3Rl
Ym9hcmRDdXN0b21EYXRhPiYpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRhLmNwcAppbmRleCA4MmZlNDcxYTU5YzEu
LjEwNjA1NTE3ZDAxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nl
bGVjdGlvbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TZWxlY3Rp
b25EYXRhLmNwcApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIFNlbGVjdGlvbkRhdGE6OnNldFVSSUxp
c3QoY29uc3QgU3RyaW5nJiB1cmlMaXN0U3RyaW5nKQogICAgIC8vIHdpbGwgZ2V0IGFuIGVtcHR5
IHN0cmluZy4gVGhpcyBpcyBpbiBsaW5lIHdpdGggdGhlIEhUTUw1IHNwZWMgKHNlZQogICAgIC8v
ICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpLiBBbHNvIGV4dHJh
Y3QgYWxsIGZpbGVuYW1lcwogICAgIC8vIGZyb20gdGhlIFVSSSBsaXN0LgotICAgIGJvb2wgc2V0
VVJMID0gZmFsc2U7CisgICAgYm9vbCBzZXRVUkwgPSBoYXNVUkwoKTsKICAgICBmb3IgKGF1dG8m
IGxpbmUgOiB1cmlMaXN0U3RyaW5nLnNwbGl0KCdcbicpKSB7CiAgICAgICAgIGxpbmUgPSBsaW5l
LnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpCkBAIC03OSw4
ICs3OSwxNCBAQCB2b2lkIFNlbGVjdGlvbkRhdGE6OnNldFVSSUxpc3QoY29uc3QgU3RyaW5nJiB1
cmlMaXN0U3RyaW5nKQogdm9pZCBTZWxlY3Rpb25EYXRhOjpzZXRVUkwoY29uc3QgVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7CiAgICAgbV91cmwgPSB1cmw7Ci0gICAgbV91cmlMaXN0
ID0gdXJsOwotICAgIHNldFRleHQodXJsLnN0cmluZygpKTsKKyAgICBpZiAobV91cmlMaXN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgbV91cmlMaXN0ID0gdXJsOworCisgICAgaWYgKCFoYXNUZXh0KCkp
CisgICAgICAgIHNldFRleHQodXJsLnN0cmluZygpKTsKKworICAgIGlmIChoYXNNYXJrdXAoKSkK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGFjdHVhbExhYmVsKGxhYmVsKTsKICAgICBp
ZiAoYWN0dWFsTGFiZWwuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmZmRiYTM2MzI3MDguLjBiODdl
NjZkMDA5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAyMC0wNS0xMiAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmV3b3Jr
IGNsaXBib2FyZCBoYW5kbGluZyBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNTExCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQWRyaWFuIFBlcmV6IGRlIENhc3Ryby4KKworICAgICAgICBVc2UgYXN5bmMgQVBJ
cyB0byBhdm9pZCBibG9ja2luZyB0aGUgVUkgcHJvY2VzcyBkdXJpbmcgdGhlIGNvbW11bmljYXRp
b24gd2l0aCB0aGUgY2xpcGJvYXJkLiBJbiBHVEs0IG9ubHkgYXN5bmMKKyAgICAgICAgQVBJcyBh
cmUgYXZhaWxhYmxlLiBBZGQgQ2xpcGJvYXJkIGNsYXNzIHRvIGhhbmRsZSB0aGUgY29tbXVuaWNh
dGlvbiB3aXRoIHRoZSBjbGlwYm9hcmQgd2l0aCB0aGUgR1RLCisgICAgICAgIGltcGxlbWVudGF0
aW9uIGluIENsaXBib2FyZEd0azMgYW5kIENsaXBib2FyZEd0azQgZmlsZXMuCisKKyAgICAgICAg
KiBTaGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJT
ZWxlY3Rpb25EYXRhOjpXZWJTZWxlY3Rpb25EYXRhKTogQWRkIGNvbnN0cnVjdG9yIHJlY2Vpdm5p
ZyBhbiBydmFsdWUgcmVmZXJlbmNlLgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViU2VsZWN0aW9u
RGF0YS5oOgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYXN0ZWJvYXJkUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFBy
b3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmNsaXBib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OnBy
aW1hcnkpOgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OmdldCk6CisgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9DbGlwYm9hcmQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9D
bGlwYm9hcmRHdGszLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6Q2xp
cGJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6aXNQcmltYXJ5Q2xpcGJvYXJkKToKKyAgICAgICAg
KFdlYktpdDo6Q2xpcGJvYXJkOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6Rm9ybWF0
c0FzeW5jRGF0YTo6Rm9ybWF0c0FzeW5jRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2Fy
ZDo6Zm9ybWF0cyk6CisgICAgICAgIChXZWJLaXQ6OlJlYWRUZXh0QXN5bmNEYXRhOjpSZWFkVGV4
dEFzeW5jRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6cmVhZFRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpSZWFkRmlsZVBhdGhzQXN5bmNEYXRhOjpSZWFkRmlsZVBhdGhzQXN5bmNE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpyZWFkRmlsZVBhdGhzKToKKyAgICAg
ICAgKFdlYktpdDo6UmVhZEJ1ZmZlckFzeW5jRGF0YTo6UmVhZEJ1ZmZlckFzeW5jRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6cmVhZEJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6
OkNsaXBib2FyZDo6d3JpdGUpOgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OmNsZWFyKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Q2xpcGJvYXJkOjpDbGlwYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpDbGlw
Ym9hcmQ6OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OmZvcm1hdHMp
OgorICAgICAgICAoV2ViS2l0OjpDbGlwYm9hcmQ6OnJlYWRUZXh0KToKKyAgICAgICAgKFdlYktp
dDo6Q2xpcGJvYXJkOjpyZWFkRmlsZVBhdGhzKToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJk
OjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6Q2xpcGJvYXJkOjp3cml0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNsaXBib2FyZDo6Y2xlYXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsv
V2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpnZXRUeXBlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6
cmVhZFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRGaWxl
UGF0aHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlVG9DbGlwYm9hcmQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmNsZWFyQ2xpcGJvYXJkKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6dHlwZXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRUZXh0RnJvbUNsaXBi
b2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZEZpbGVQ
YXRoc0Zyb21DbGlwYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OnJlYWRCdWZmZXJGcm9tQ2xpcGJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjp3cml0ZVRvQ2xpcGJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjbGVhckNsaXBib2FyZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKwogMjAyMC0wNS0xMiAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIGEgUmVh
bHRpbWVNZWRpYVNvdXJjZSB2aWRlbyBzYW1wbGUgb2JzZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRhLmNwcAppbmRleCAxOWZjMjRhYzY5ZDYuLjliNTA2
YjM1YjNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVjdGlv
bkRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRh
LmNwcApAQCAtNDEsNiArNDEsMTEgQEAgV2ViU2VsZWN0aW9uRGF0YTo6V2ViU2VsZWN0aW9uRGF0
YShSZWY8V2ViQ29yZTo6U2VsZWN0aW9uRGF0YT4mJiBkYXRhKQogewogfQogCitXZWJTZWxlY3Rp
b25EYXRhOjpXZWJTZWxlY3Rpb25EYXRhKFdlYkNvcmU6OlNlbGVjdGlvbkRhdGEmJiBkYXRhKQor
ICAgIDogc2VsZWN0aW9uRGF0YShkYXRhKQoreworfQorCiB2b2lkIFdlYlNlbGVjdGlvbkRhdGE6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBz
ZWxlY3Rpb25EYXRhLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvZ3Rr
L1dlYlNlbGVjdGlvbkRhdGEuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJTZWxlY3Rp
b25EYXRhLmgKaW5kZXggZGQ2ZGFhZTQwODM5Li4yMDVmOGVlYzAyYjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJTZWxlY3Rpb25EYXRhLmgKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvZ3RrL1dlYlNlbGVjdGlvbkRhdGEuaApAQCAtMzEsNiArMzEsNyBAQCBzdHJ1
Y3QgV2ViU2VsZWN0aW9uRGF0YSB7CiAgICAgV2ViU2VsZWN0aW9uRGF0YSgpOwogICAgIGV4cGxp
Y2l0IFdlYlNlbGVjdGlvbkRhdGEoY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uRGF0YSYpOwogICAg
IGV4cGxpY2l0IFdlYlNlbGVjdGlvbkRhdGEoUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+JiYp
OworICAgIGV4cGxpY2l0IFdlYlNlbGVjdGlvbkRhdGEoV2ViQ29yZTo6U2VsZWN0aW9uRGF0YSYm
KTsKIAogICAgIFJlZjxXZWJDb3JlOjpTZWxlY3Rpb25EYXRhPiBzZWxlY3Rpb25EYXRhOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYktpdC9T
b3VyY2VzR1RLLnR4dAppbmRleCAzZmJjYjQxNDg0NTAuLjY4ZjAwNTg3NzZiZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNHVEsudHh0CkBAIC0yNTMsNiArMjUzLDkgQEAgVUlQcm9jZXNzL2dzdHJlYW1lci9XZWJQYWdl
UHJveHlHU3RyZWFtZXIuY3BwCiBVSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3Jl
LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXls
YW5kLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVY
MTEuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmQuY3BwCitVSVByb2Nlc3Mv
Z3RrL0NsaXBib2FyZEd0azMuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRH
dGs0LmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcAog
VUlQcm9jZXNzL2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9ndGsvSGFyZHdh
cmVBY2NlbGVyYXRpb25NYW5hZ2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YXN0ZWJvYXJkUHJveHkuaAppbmRleCA0NzBmNTk5ZTAzZGUuLjdiOGFiYTg0YzhjNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKQEAgLTM0LDYgKzM0
LDEwIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hT
ZXQuaD4KIAorbmFtZXNwYWNlIElQQyB7CitjbGFzcyBTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNl
OworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIFBhc3RlYm9h
cmRDdXN0b21EYXRhOwpAQCAtNjYsNiArNzAsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShH
VEspCiAgICAgdm9pZCBzZXRQcmltYXJ5U2VsZWN0aW9uT3duZXIoV2ViRnJhbWVQcm94eSopOwor
ICAgIFdlYkZyYW1lUHJveHkqIHByaW1hcnlTZWxlY3Rpb25Pd25lcigpIGNvbnN0IHsgcmV0dXJu
IG1fcHJpbWFyeVNlbGVjdGlvbk93bmVyOyB9CiAgICAgdm9pZCBkaWREZXN0cm95RnJhbWUoV2Vi
RnJhbWVQcm94eSopOwogI2VuZGlmCiAKQEAgLTExOCwxMSArMTIzLDE0IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB1cmxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcoSVBDOjpDb25uZWN0aW9uJiwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcm
JiB1cmwsIFN0cmluZyYmIHRpdGxlKT4mJik7CiAKICNpZiBQTEFURk9STShHVEspCi0gICAgdm9p
ZCB3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFdl
YlNlbGVjdGlvbkRhdGEmKTsKLSAgICB2b2lkIHJlYWRGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViU2VsZWN0aW9uRGF0
YSYmKT4mJik7CisgICAgdm9pZCBnZXRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmKTsKKyAgICB2b2lk
IHJlYWRUZXh0KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoU3RyaW5nJiYpPiYmKTsKKyAgICB2b2lkIHJlYWRGaWxlUGF0aHMoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYm
KT4mJik7CisgICAgdm9pZCByZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBD
OjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlJiYpPiYmKTsKKyAgICB2b2lkIHdyaXRlVG9DbGlw
Ym9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV2ViU2VsZWN0aW9uRGF0YSYmKTsK
KyAgICB2b2lkIGNsZWFyQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwog
CiAgICAgV2ViRnJhbWVQcm94eSogbV9wcmltYXJ5U2VsZWN0aW9uT3duZXIgeyBudWxscHRyIH07
Ci0gICAgV2ViRnJhbWVQcm94eSogbV9mcmFtZVdyaXRpbmdUb0NsaXBib2FyZCB7IG51bGxwdHIg
fTsKICNlbmRpZiAvLyBQTEFURk9STShHVEspCiAKICNpZiBVU0UoTElCV1BFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmlu
CmluZGV4IDg4YzMwNjA5ODkwNS4uN2ZkNzY3ZmVhN2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC02MSw4
ICs2MSwxMiBAQCBtZXNzYWdlcyAtPiBXZWJQYXN0ZWJvYXJkUHJveHkgTm90UmVmQ291bnRlZCB7
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHZXRUeXBlcyhTdHJpbmcgcGFzdGVi
b2FyZE5hbWUpIC0+IChWZWN0b3I8U3RyaW5nPiB0eXBlcykgU3luY2hyb25vdXMKKyAgICBSZWFk
VGV4dChTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChTdHJpbmcgdGV4dCkgU3luY2hyb25vdXMK
KyAgICBSZWFkRmlsZVBhdGhzKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKFZlY3RvcjxTdHJp
bmc+IHR5cGVzKSBTeW5jaHJvbm91cworICAgIFJlYWRCdWZmZXIoU3RyaW5nIHBhc3RlYm9hcmRO
YW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChJUEM6OlNoYXJlZEJ1ZmZlckRhdGFSZWZl
cmVuY2UgZGF0YSkgU3luY2hyb25vdXMKICAgICBXcml0ZVRvQ2xpcGJvYXJkKFN0cmluZyBwYXN0
ZWJvYXJkTmFtZSwgc3RydWN0IFdlYktpdDo6V2ViU2VsZWN0aW9uRGF0YSBwYXN0ZWJvYXJkQ29u
dGVudCkKLSAgICBSZWFkRnJvbUNsaXBib2FyZChTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChz
dHJ1Y3QgV2ViS2l0OjpXZWJTZWxlY3Rpb25EYXRhIHBhc3RlYm9hcmRDb250ZW50KSBTeW5jaHJv
bm91cworICAgIENsZWFyQ2xpcGJvYXJkKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkKICNlbmRpZgog
CiAjaWYgVVNFKExJQldQRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9DbGlwYm9hcmQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yNDk3NTM3NjAyNTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJk
LmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIENsaXBib2FyZCYgY2xpcGJvYXJkKCkKK3sK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RhdGljIExhenlOZXZl
ckRlc3Ryb3llZDxDbGlwYm9hcmQ+IG9iamVjdDsKKworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VG
bGFnLCBbXSB7CisgICAgICAgIG9iamVjdC5jb25zdHJ1Y3QoQ2xpcGJvYXJkOjpUeXBlOjpDbGlw
Ym9hcmQpOworICAgIH0pOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIENsaXBi
b2FyZCYgcHJpbWFyeSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwor
ICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8Q2xpcGJvYXJkPiBvYmplY3Q7CisKKyAgICBz
dGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBvYmplY3QuY29uc3RydWN0KENs
aXBib2FyZDo6VHlwZTo6UHJpbWFyeSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gb2JqZWN0Owor
fQorCitDbGlwYm9hcmQmIENsaXBib2FyZDo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBpZiAobmFtZSA9PSAiQ0xJUEJPQVJEIikKKyAgICAgICAgcmV0dXJuIGNsaXBib2FyZCgpOwor
CisgICAgaWYgKG5hbWUgPT0gIlBSSU1BUlkiKQorICAgICAgICByZXR1cm4gcHJpbWFyeSgpOwor
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJk
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZjkyMWJlNWM0ZTkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQ2xpcGJvYXJkLmgKQEAgLTAsMCArMSw2
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKworI2lmICFVU0UoR1RLNCkKK3R5cGVkZWYgc3RydWN0IF9HdGtDbGlw
Ym9hcmQgR3RrQ2xpcGJvYXJkOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IFNlbGVjdGlvbkRhdGE7CitjbGFzcyBTaGFyZWRCdWZmZXI7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJGcmFtZVByb3h5OworCitjbGFzcyBDbGlwYm9hcmQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKENsaXBib2FyZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIHN0YXRpYyBDbGlwYm9hcmQmIGdldChjb25zdCBTdHJpbmcmIG5hbWUpOwor
CisgICAgZW51bSBjbGFzcyBUeXBlIHsgQ2xpcGJvYXJkLCBQcmltYXJ5IH07CisgICAgZXhwbGlj
aXQgQ2xpcGJvYXJkKFR5cGUpOworCisgICAgVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBm
b3JtYXRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYpOworICAg
IHZvaWQgcmVhZFRleHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYpOworICAg
IHZvaWQgcmVhZEZpbGVQYXRocyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmKTsKKyAgICB2b2lkIHJlYWRCdWZmZXIoY29uc3QgY2hhciosIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJik+JiYpOworICAgIHZvaWQgd3Jp
dGUoUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+JiYpOworICAgIHZvaWQgY2xlYXIoKTsKKwor
cHJpdmF0ZToKKyNpZiAhVVNFKEdUSzQpCisgICAgR3RrQ2xpcGJvYXJkKiBtX2NsaXBib2FyZCB7
IG51bGxwdHIgfTsKKyAgICBXZWJGcmFtZVByb3h5KiBtX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJk
IHsgbnVsbHB0ciB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGszLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGszLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmUzOTE1Y2YwNDUyOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGszLmNwcApAQCAtMCww
ICsxLDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKworI2lmICFVU0Uo
R1RLNCkKKworI2luY2x1ZGUgIldlYlBhc3RlYm9hcmRQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvR1JlZlB0ckd0ay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2VsZWN0aW9uRGF0YS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ2xpcGJv
YXJkOjpDbGlwYm9hcmQoVHlwZSB0eXBlKQorICAgIDogbV9jbGlwYm9hcmQoZ3RrX2NsaXBib2Fy
ZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgdHlwZSA9PSBUeXBl
OjpDbGlwYm9hcmQgPyBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCA6IEdES19TRUxFQ1RJT05fUFJJ
TUFSWSkpCit7Cit9CisKK3N0YXRpYyBib29sIGlzUHJpbWFyeUNsaXBib2FyZChHdGtDbGlwYm9h
cmQqIGNsaXBib2FyZCkKK3sKKyAgICByZXR1cm4gY2xpcGJvYXJkID09IGd0a19jbGlwYm9hcmRf
Z2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCksIEdES19TRUxFQ1RJT05f
UFJJTUFSWSk7Cit9CisKK0NsaXBib2FyZDo6VHlwZSBDbGlwYm9hcmQ6OnR5cGUoKSBjb25zdAor
eworICAgIHJldHVybiBpc1ByaW1hcnlDbGlwYm9hcmQobV9jbGlwYm9hcmQpID8gVHlwZTo6UHJp
bWFyeSA6IFR5cGU6OkNsaXBib2FyZDsKK30KKworc3RydWN0IEZvcm1hdHNBc3luY0RhdGEgewor
ICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKworICAgIGV4cGxpY2l0IEZvcm1h
dHNBc3luY0RhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBo
YW5kbGVyKQorICAgICAgICA6IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxlcikpCisg
ICAgeworICAgIH0KKworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4m
Jik+IGNvbXBsZXRpb25IYW5kbGVyOworfTsKKwordm9pZCBDbGlwYm9hcmQ6OmZvcm1hdHMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBndGtfY2xpcGJvYXJkX3JlcXVlc3RfdGFyZ2V0cyhtX2NsaXBib2FyZCwgW10o
R3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEdka0F0b20qIGF0b21zLCBnaW50IGF0b21zQ291bnQs
IGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGb3JtYXRzQXN5
bmNEYXRhPiBkYXRhKHN0YXRpY19jYXN0PEZvcm1hdHNBc3luY0RhdGEqPih1c2VyRGF0YSkpOwor
CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBhdG9tc0NvdW50OyArK2kpIHsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gYXRv
bShnZGtfYXRvbV9uYW1lKGF0b21zW2ldKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFN0
cmluZzo6ZnJvbVVURjgoYXRvbS5nZXQoKSkpOworICAgICAgICB9CisgICAgICAgIGRhdGEtPmNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CisgICAgfSwgbmV3IEZvcm1hdHNBc3lu
Y0RhdGEoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKK30KKworc3RydWN0IFJlYWRUZXh0
QXN5bmNEYXRhIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICBl
eHBsaWNpdCBSZWFkVGV4dEFzeW5jRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYm
KT4mJiBoYW5kbGVyKQorICAgICAgICA6IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaGFuZGxl
cikpCisgICAgeworICAgIH0KKworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYp
PiBjb21wbGV0aW9uSGFuZGxlcjsKK307CisKK3ZvaWQgQ2xpcGJvYXJkOjpyZWFkVGV4dChDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBndGtfY2xpcGJvYXJkX3JlcXVlc3RfdGV4dChtX2NsaXBib2FyZCwgW10oR3RrQ2xpcGJvYXJk
KiwgY29uc3QgY2hhciogdGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFJlYWRUZXh0QXN5bmNEYXRhPiBkYXRhKHN0YXRpY19jYXN0PFJlYWRUZXh0QXN5
bmNEYXRhKj4odXNlckRhdGEpKTsKKyAgICAgICAgZGF0YS0+Y29tcGxldGlvbkhhbmRsZXIoU3Ry
aW5nOjpmcm9tVVRGOCh0ZXh0KSk7CisgICAgfSwgbmV3IFJlYWRUZXh0QXN5bmNEYXRhKFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Cit9CisKK3N0cnVjdCBSZWFkRmlsZVBhdGhzQXN5bmNE
YXRhIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICBleHBsaWNp
dCBSZWFkRmlsZVBhdGhzQXN5bmNEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0
cmluZz4mJik+JiYgaGFuZGxlcikKKyAgICAgICAgOiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KGhhbmRsZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZl
Y3RvcjxTdHJpbmc+JiYpPiBjb21wbGV0aW9uSGFuZGxlcjsKK307CisKK3ZvaWQgQ2xpcGJvYXJk
OjpyZWFkRmlsZVBhdGhzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZ3RrX2NsaXBib2FyZF9yZXF1ZXN0X3VyaXMo
bV9jbGlwYm9hcmQsIFtdKEd0a0NsaXBib2FyZCosIGNoYXIqKiB1cmlzLCBncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVhZEZpbGVQYXRoc0FzeW5jRGF0YT4g
ZGF0YShzdGF0aWNfY2FzdDxSZWFkRmlsZVBhdGhzQXN5bmNEYXRhKj4odXNlckRhdGEpKTsKKyAg
ICAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyB1cmlzICYmIHVyaXNbaV07ICsraSkgeworICAgICAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4g
ZmlsZW5hbWUoZ19maWxlbmFtZV9mcm9tX3VyaSh1cmlzW2ldLCBudWxscHRyLCBudWxscHRyKSk7
CisgICAgICAgICAgICBpZiAoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lLmdldCgpKSk7CisgICAgICAgIH0KKyAgICAgICAg
ZGF0YS0+Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICB9LCBuZXcgUmVh
ZEZpbGVQYXRoc0FzeW5jRGF0YShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCitz
dHJ1Y3QgUmVhZEJ1ZmZlckFzeW5jRGF0YSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxM
T0NBVEVEOworCisgICAgZXhwbGljaXQgUmVhZEJ1ZmZlckFzeW5jRGF0YShDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpPiYmIGhhbmRsZXIpCisgICAg
ICAgIDogY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShoYW5kbGVyKSkKKyAgICB7CisgICAgfQor
CisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYm
KT4gY29tcGxldGlvbkhhbmRsZXI7Cit9OworCit2b2lkIENsaXBib2FyZDo6cmVhZEJ1ZmZlcihj
b25zdCBjaGFyKiBmb3JtYXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZ3RrX2NsaXBib2Fy
ZF9yZXF1ZXN0X2NvbnRlbnRzKG1fY2xpcGJvYXJkLCBnZGtfYXRvbV9pbnRlcm4oZm9ybWF0LCBU
UlVFKSwgW10oR3RrQ2xpcGJvYXJkKiwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uLCBncG9p
bnRlciB1c2VyRGF0YSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVhZEJ1ZmZlckFzeW5j
RGF0YT4gZGF0YShzdGF0aWNfY2FzdDxSZWFkQnVmZmVyQXN5bmNEYXRhKj4odXNlckRhdGEpKTsK
KyAgICAgICAgaW50IGNvbnRlbnRzTGVuZ3RoOworICAgICAgICBjb25zdCBhdXRvKiBjb250ZW50
cyA9IGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YV93aXRoX2xlbmd0aChzZWxlY3Rpb24sICZj
b250ZW50c0xlbmd0aCk7CisgICAgICAgIGRhdGEtPmNvbXBsZXRpb25IYW5kbGVyKFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnRzLCBjb250ZW50c0xlbmd0aCA+IDAgPyBzdGF0
aWNfY2FzdDxzaXplX3Q+KGNvbnRlbnRzTGVuZ3RoKSA6IDApKTsKKyAgICB9LCBuZXcgUmVhZEJ1
ZmZlckFzeW5jRGF0YShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCitzdHJ1Y3Qg
V3JpdGVBc3luY0RhdGEgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKwor
ICAgIFdyaXRlQXN5bmNEYXRhKFJlZjxXZWJDb3JlOjpTZWxlY3Rpb25EYXRhPiYmIHNlbGVjdGlv
biwgQ2xpcGJvYXJkJiBjbGlwYm9hcmQpCisgICAgICAgIDogc2VsZWN0aW9uRGF0YShXVEZNb3Zl
KHNlbGVjdGlvbikpCisgICAgICAgICwgY2xpcGJvYXJkKGNsaXBib2FyZCkKKyAgICB7CisgICAg
fQorCisgICAgUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+IHNlbGVjdGlvbkRhdGE7CisgICAg
Q2xpcGJvYXJkJiBjbGlwYm9hcmQ7Cit9OworCitlbnVtIENsaXBib2FyZFRhcmdldFR5cGUgeyBN
YXJrdXAsIFRleHQsIEltYWdlLCBTbWFydFBhc3RlIH07CisKK3ZvaWQgQ2xpcGJvYXJkOjp3cml0
ZShSZWY8V2ViQ29yZTo6U2VsZWN0aW9uRGF0YT4mJiBzZWxlY3Rpb25EYXRhKQoreworICAgIFNl
dEZvclNjb3BlPFdlYkZyYW1lUHJveHkqPiBmcmFtZVdyaXRpbmdUb0NsaXBib2FyZChtX2ZyYW1l
V3JpdGluZ1RvQ2xpcGJvYXJkLCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNpbmdsZXRvbigpLnByaW1h
cnlTZWxlY3Rpb25Pd25lcigpKTsKKworICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gbGlzdCA9
IGFkb3B0R1JlZihndGtfdGFyZ2V0X2xpc3RfbmV3KG51bGxwdHIsIDApKTsKKyAgICBpZiAoc2Vs
ZWN0aW9uRGF0YS0+aGFzTWFya3VwKCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlz
dC5nZXQoKSwgZ2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmcoInRleHQvaHRtbCIpLCAwLCBD
bGlwYm9hcmRUYXJnZXRUeXBlOjpNYXJrdXApOworICAgIGlmIChzZWxlY3Rpb25EYXRhLT5oYXNJ
bWFnZSgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMobGlzdC5n
ZXQoKSwgQ2xpcGJvYXJkVGFyZ2V0VHlwZTo6SW1hZ2UsIFRSVUUpOworICAgIGlmIChzZWxlY3Rp
b25EYXRhLT5oYXNUZXh0KCkpCisgICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJn
ZXRzKGxpc3QuZ2V0KCksIENsaXBib2FyZFRhcmdldFR5cGU6OlRleHQpOworICAgIGlmIChzZWxl
Y3Rpb25EYXRhLT5jYW5TbWFydFJlcGxhY2UoKSkKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0X2Fk
ZChsaXN0LmdldCgpLCBnZGtfYXRvbV9pbnRlcm5fc3RhdGljX3N0cmluZygiYXBwbGljYXRpb24v
dm5kLndlYmtpdGd0ay5zbWFydHBhc3RlIiksIDAsIENsaXBib2FyZFRhcmdldFR5cGU6OlNtYXJ0
UGFzdGUpOworCisgICAgaW50IG51bWJlck9mVGFyZ2V0czsKKyAgICBHdGtUYXJnZXRFbnRyeSog
dGFibGUgPSBndGtfdGFyZ2V0X3RhYmxlX25ld19mcm9tX2xpc3QobGlzdC5nZXQoKSwgJm51bWJl
ck9mVGFyZ2V0cyk7CisgICAgaWYgKCFudW1iZXJPZlRhcmdldHMpIHsKKyAgICAgICAgZ3RrX2Ns
aXBib2FyZF9jbGVhcihtX2NsaXBib2FyZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvIGRhdGEgPSBXVEY6Om1ha2VVbmlxdWU8V3JpdGVBc3luY0RhdGE+KFdURk1vdmUoc2Vs
ZWN0aW9uRGF0YSksICp0aGlzKTsKKyAgICBnYm9vbGVhbiBzdWNjZWVkZWQgPSBndGtfY2xpcGJv
YXJkX3NldF93aXRoX2RhdGEobV9jbGlwYm9hcmQsIHRhYmxlLCBudW1iZXJPZlRhcmdldHMsCisg
ICAgICAgIFtdKEd0a0NsaXBib2FyZCosIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbiwgZ3Vp
bnQgaW5mbywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGRhdGEgPSAq
c3RhdGljX2Nhc3Q8V3JpdGVBc3luY0RhdGEqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBhdXRv
JiBzZWxlY3Rpb25EYXRhID0gZGF0YS5zZWxlY3Rpb25EYXRhLmdldCgpOworICAgICAgICAgICAg
c3dpdGNoIChpbmZvKSB7CisgICAgICAgICAgICBjYXNlIENsaXBib2FyZFRhcmdldFR5cGU6Ok1h
cmt1cDogeworICAgICAgICAgICAgICAgIENTdHJpbmcgbWFya3VwID0gc2VsZWN0aW9uRGF0YS5t
YXJrdXAoKS51dGY4KCk7CisgICAgICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChz
ZWxlY3Rpb24sIGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0L2h0bWwiKSwgOCwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihtYXJrdXAuZGF0YSgpKSwgbWFya3VwLmxl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgQ2xpcGJvYXJkVGFyZ2V0VHlwZTo6VGV4dDoKKyAgICAgICAgICAgICAgICBndGtf
c2VsZWN0aW9uX2RhdGFfc2V0X3RleHQoc2VsZWN0aW9uLCBzZWxlY3Rpb25EYXRhLnRleHQoKS51
dGY4KCkuZGF0YSgpLCAtMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIENsaXBib2FyZFRhcmdldFR5cGU6OkltYWdlOiB7CisgICAgICAgICAgICAgICAgaWYgKHNl
bGVjdGlvbkRhdGEuaGFzSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICBHUmVmUHRyPEdk
a1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKHNlbGVjdGlvbkRhdGEuaW1hZ2UoKS0+Z2V0R2Rr
UGl4YnVmKCkpOworICAgICAgICAgICAgICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3Bp
eGJ1ZihzZWxlY3Rpb24sIHBpeGJ1Zi5nZXQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDbGlwYm9h
cmRUYXJnZXRUeXBlOjpTbWFydFBhc3RlOgorICAgICAgICAgICAgICAgIGd0a19zZWxlY3Rpb25f
ZGF0YV9zZXRfdGV4dChzZWxlY3Rpb24sICIiLCAtMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIFtdKEd0a0NsaXBib2FyZCogY2xp
cGJvYXJkLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFdyaXRlQXN5bmNEYXRhPiBkYXRhKHN0YXRpY19jYXN0PFdyaXRlQXN5bmNEYXRhKj4odXNlckRh
dGEpKTsKKyAgICAgICAgICAgIGlmIChpc1ByaW1hcnlDbGlwYm9hcmQoY2xpcGJvYXJkKSAmJiBX
ZWJQYXN0ZWJvYXJkUHJveHk6OnNpbmdsZXRvbigpLnByaW1hcnlTZWxlY3Rpb25Pd25lcigpICE9
IGRhdGEtPmNsaXBib2FyZC5tX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkKQorICAgICAgICAgICAg
ICAgIFdlYlBhc3RlYm9hcmRQcm94eTo6c2luZ2xldG9uKCkuc2V0UHJpbWFyeVNlbGVjdGlvbk93
bmVyKG51bGxwdHIpOworICAgICAgICB9LCBkYXRhLmdldCgpKTsKKworICAgIGlmIChzdWNjZWVk
ZWQpIHsKKyAgICAgICAgLy8gSW4gY2FzZSBvZiBzdWNjZXNzIHRoZSBjbGlwYm9hcmQgb3ducyBk
YXRhLCBzbyB3ZSByZWxlYXNlIGl0IGhlcmUuCisgICAgICAgIGRhdGEucmVsZWFzZSgpOworCisg
ICAgICAgIGd0a19jbGlwYm9hcmRfc2V0X2Nhbl9zdG9yZShtX2NsaXBib2FyZCwgbnVsbHB0ciwg
MCk7CisgICAgfQorICAgIGd0a190YXJnZXRfdGFibGVfZnJlZSh0YWJsZSwgbnVtYmVyT2ZUYXJn
ZXRzKTsKK30KKwordm9pZCBDbGlwYm9hcmQ6OmNsZWFyKCkKK3sKKyAgICBndGtfY2xpcGJvYXJk
X2NsZWFyKG1fY2xpcGJvYXJkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjBmMWJkOWJhMzUyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0NsaXBib2FyZEd0azQuY3Bw
CkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisKKyNp
ZiBVU0UoR1RLNCkKKworI2luY2x1ZGUgPFdlYkNvcmUvU2VsZWN0aW9uRGF0YS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitDbGlw
Ym9hcmQ6OkNsaXBib2FyZChUeXBlKQoreworfQorCitDbGlwYm9hcmQ6OlR5cGUgQ2xpcGJvYXJk
Ojp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVHlwZTo6Q2xpcGJvYXJkOworfQorCit2b2lk
IENsaXBib2FyZDo6Zm9ybWF0cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7
Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpyZWFkVGV4dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0
cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7
IH0pOworfQorCit2b2lkIENsaXBib2FyZDo6cmVhZEZpbGVQYXRocyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpyZWFkQnVmZmVyKGNv
bnN0IGNoYXIqIGZvcm1hdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFu
ZGxlcihXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpKTsKK30KKwordm9pZCBDbGlwYm9h
cmQ6OndyaXRlKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkRhdGEmKQoreworfQorCit2b2lkIENs
aXBib2FyZDo6Y2xlYXIoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFBy
b3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJv
eHlHdGsuY3BwCmluZGV4IDllYzhlODk1OTk2My4uMGExMzJlYzU1MjMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcApA
QCAtMjYsMjcgKzI2LDQ1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGFz
dGVib2FyZFByb3h5LmgiCiAKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgogI2lu
Y2x1ZGUgIldlYlNlbGVjdGlvbkRhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtUGFz
dGVib2FyZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8
d3RmL1NldEZvclNjb3BlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVRvQ2xpcGJvYXJkKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFdlYlNlbGVjdGlvbkRhdGEmIHNlbGVj
dGlvbikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRUeXBlcyhjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFNldEZvclNjb3BlPFdlYkZyYW1lUHJveHkqPiBm
cmFtZVdyaXRpbmdUb0NsaXBib2FyZChtX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkLCBtX3ByaW1h
cnlTZWxlY3Rpb25Pd25lcik7Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1l
KS53cml0ZVRvQ2xpcGJvYXJkKHNlbGVjdGlvbi5zZWxlY3Rpb25EYXRhLCBbdGhpc10gewotICAg
ICAgICBpZiAobV9mcmFtZVdyaXRpbmdUb0NsaXBib2FyZCA9PSBtX3ByaW1hcnlTZWxlY3Rpb25P
d25lcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2V0UHJpbWFyeVNlbGVjdGlvbk93
bmVyKG51bGxwdHIpOwotICAgIH0pOworICAgIENsaXBib2FyZDo6Z2V0KHBhc3RlYm9hcmROYW1l
KS5mb3JtYXRzKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJQYXN0
ZWJvYXJkUHJveHk6OnJlYWRGcm9tQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViU2VsZWN0aW9uRGF0YSYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkVGV4dChjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJTZWxlY3Rpb25E
YXRhKFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkucmVhZEZyb21DbGlwYm9hcmQo
KSkpOworICAgIENsaXBib2FyZDo6Z2V0KHBhc3RlYm9hcmROYW1lKS5yZWFkVGV4dChXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFk
RmlsZVBhdGhzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQ2xp
cGJvYXJkOjpnZXQocGFzdGVib2FyZE5hbWUpLnJlYWRGaWxlUGF0aHMoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEJ1ZmZlcihj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6U2hhcmVkQnVmZmVyRGF0YVJlZmVyZW5jZSYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBDbGlwYm9hcmQ6OmdldChwYXN0ZWJvYXJk
TmFtZSkucmVhZEJ1ZmZlcihwYXN0ZWJvYXJkVHlwZS51dGY4KCkuZGF0YSgpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVRv
Q2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFdlYlNlbGVjdGlvbkRhdGEm
JiBzZWxlY3Rpb24pCit7CisgICAgQ2xpcGJvYXJkOjpnZXQocGFzdGVib2FyZE5hbWUpLndyaXRl
KFdURk1vdmUoc2VsZWN0aW9uLnNlbGVjdGlvbkRhdGEpKTsKK30KKwordm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmNsZWFyQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7
CisgICAgQ2xpcGJvYXJkOjpnZXQocGFzdGVib2FyZE5hbWUpLmNsZWFyKCk7CiB9CiAKIHZvaWQg
V2ViUGFzdGVib2FyZFByb3h5OjpzZXRQcmltYXJ5U2VsZWN0aW9uT3duZXIoV2ViRnJhbWVQcm94
eSogZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDIxZjk4N2Rj
Y2FlYi4uNmRiYzNmY2I5MjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApA
QCAtMjkzLDE3ICsyOTMsNDkgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnVwZGF0ZVN1
cHBvcnRlZFR5cGVJZGVudGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYKICNpZiBQTEFURk9S
TShHVEspCiAvLyBQYXN0ZWJvYXJkU3RyYXRlZ3kKIAorVmVjdG9yPFN0cmluZz4gV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjp0eXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAg
IFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFBy
b3h5OjpHZXRUeXBlcyhwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OkdldFR5cGVzOjpSZXBseShyZXN1bHQpLCAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkVGV4dEZyb21DbGlwYm9hcmQoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRUZXh0KHBhc3RlYm9hcmROYW1lKSwg
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZFRleHQ6OlJlcGx5KHJlc3VsdCksIDAp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6cmVhZEZpbGVQYXRoc0Zyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZEZpbGVQYXRocyhwYXN0ZWJvYXJkTmFtZSksIE1lc3Nh
Z2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRGaWxlUGF0aHM6OlJlcGx5KHJlc3VsdCksIDAp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6cmVhZEJ1ZmZlckZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKK3sKKworICAgIElQQzo6
U2hhcmVkQnVmZmVyRGF0YVJlZmVyZW5jZSBkYXRhOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0
ZWJvYXJkUHJveHk6OlJlYWRCdWZmZXIocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwg
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZEJ1ZmZlcjo6UmVwbHkoZGF0YSksIDAp
OworICAgIHJldHVybiBkYXRhLmJ1ZmZlcigpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6d3JpdGVUb0NsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBTZWxl
Y3Rpb25EYXRhJiYgc2VsZWN0aW9uRGF0YSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJk
UHJveHk6OldyaXRlVG9DbGlwYm9hcmQocGFzdGVib2FyZE5hbWUsIFdlYlNlbGVjdGlvbkRhdGEo
c2VsZWN0aW9uRGF0YSkpLCAwKTsKK30KKwogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Ondy
aXRlVG9DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU2VsZWN0
aW9uRGF0YSYgc2VsZWN0aW9uKQogewogICAgIFdlYlNlbGVjdGlvbkRhdGEgc2VsZWN0aW9uRGF0
YShzZWxlY3Rpb24pOwogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6V3JpdGVUb0Ns
aXBib2FyZChwYXN0ZWJvYXJkTmFtZSwgc2VsZWN0aW9uRGF0YSksIDApOwogfQogCi1SZWY8U2Vs
ZWN0aW9uRGF0YT4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkRnJvbUNsaXBib2FyZChjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNs
ZWFyQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgV2ViU2Vs
ZWN0aW9uRGF0YSBzZWxlY3Rpb247Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94
eTo6UmVhZEZyb21DbGlwYm9hcmQocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVi
b2FyZFByb3h5OjpSZWFkRnJvbUNsaXBib2FyZDo6UmVwbHkoc2VsZWN0aW9uKSwgMCk7Ci0gICAg
cmV0dXJuIFdURk1vdmUoc2VsZWN0aW9uLnNlbGVjdGlvbkRhdGEpOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhc3RlYm9hcmRQcm94eTo6Q2xlYXJDbGlwYm9hcmQocGFzdGVib2FyZE5hbWUpLCAwKTsKIH0K
IAogI2VuZGlmIC8vIFBMQVRGT1JNKEdUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaApp
bmRleCAzNWIzZjFmOGFhNTkuLjY1ZTEzYzNjYjFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaApAQCAtNzUsOCArNzUsMTMgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgdXJsU3RyaW5n
U3VpdGFibGVGb3JMb2FkaW5nKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFN0cmluZyYg
dGl0bGUpIG92ZXJyaWRlOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQorICAgIFZlY3RvcjxT
dHJpbmc+IHR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOworICAg
IFN0cmluZyByZWFkVGV4dEZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFN0cmluZz4gcmVhZEZpbGVQYXRoc0Zyb21DbGlwYm9h
cmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZlckZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCB3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFdl
YkNvcmU6OlNlbGVjdGlvbkRhdGEmKSBvdmVycmlkZTsKLSAgICBSZWY8V2ViQ29yZTo6U2VsZWN0
aW9uRGF0YT4gcmVhZEZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCB3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIFdlYkNvcmU6OlNlbGVjdGlvbkRhdGEmJikgb3ZlcnJpZGU7CisgICAgdm9pZCBj
bGVhckNsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBvdmVycmlkZTsKICNl
bmRpZgogI2lmIFVTRShMSUJXUEUpCiAgICAgdm9pZCBnZXRUeXBlcyhWZWN0b3I8U3RyaW5nPiYg
dHlwZXMpIG92ZXJyaWRlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>